iOS中定义成员变量时@property(nonatomic, copy/strong/assign/weak)小结
2015-09-03 00:11
260 查看
首先,用@property()定义一个成员变量时:1:生成一个带有下滑线的成员变量,2:生成成员变量的set和get方法
1:定义字符串为成员变量时:@property (nonatomic,
copy) NSString *str; //可变不可变都适用
2:定义数组为成员变量时:@property (nonatomic,
strong)NSArray *array; //可变不可变都适用
3:当使用协议和代理时,需要在协议的主动方定义一个id类型的delegate时,@property (nonatomic,
assign) id<协议名字> delegate;
4:这个需要注意:两个类互相引用时,nonatomic后面一定要用assign 或者 weak,不然会造成内存泄露,释放不完全
关于第4点举个例子:有个Car类,一个Person类
人有一辆车,车里做这这个人
创建车对象的时候,会有一个强指针指向车这个对象
创建人对象的时候,会有一个强指针指向人这个对象
指定这个车就是人拥有的车时,会再有一个指针指向车对象,这时车对象就有两个指针指向
当车里坐的就是这个人时,也会有一个指针指向人这个对象,这时人对象也会有两个指针指向
如果nonatomic 后面是strong的话,那么人对象和车对象都是由两个强指针指向,在arc的环境下,释放车对象,释放人对象后,车对象和人对象还会各有一个强指针指向,并且强指针都是来自于对方。这种循环引用的话就会释放不完全,造成内存泄露。
在Person这个类里定义一个Car类型的车时,nonatomic后面用assign 或者 weak的话就只是赋值,或是一个弱指针指向车对象,当释放内存时,指向车对象的强指针被释放了后就只有一个弱指针指向,也会释放。这就可以解决上述的释放不完全的情况。
同样地,在Car类里定义Person类型的人时也可以用assign或者weak。
两个类里有一个用assign或者weak就可以解决。当然两个都用也可以。
1:定义字符串为成员变量时:@property (nonatomic,
copy) NSString *str; //可变不可变都适用
2:定义数组为成员变量时:@property (nonatomic,
strong)NSArray *array; //可变不可变都适用
3:当使用协议和代理时,需要在协议的主动方定义一个id类型的delegate时,@property (nonatomic,
assign) id<协议名字> delegate;
4:这个需要注意:两个类互相引用时,nonatomic后面一定要用assign 或者 weak,不然会造成内存泄露,释放不完全
关于第4点举个例子:有个Car类,一个Person类
人有一辆车,车里做这这个人
创建车对象的时候,会有一个强指针指向车这个对象
创建人对象的时候,会有一个强指针指向人这个对象
指定这个车就是人拥有的车时,会再有一个指针指向车对象,这时车对象就有两个指针指向
当车里坐的就是这个人时,也会有一个指针指向人这个对象,这时人对象也会有两个指针指向
如果nonatomic 后面是strong的话,那么人对象和车对象都是由两个强指针指向,在arc的环境下,释放车对象,释放人对象后,车对象和人对象还会各有一个强指针指向,并且强指针都是来自于对方。这种循环引用的话就会释放不完全,造成内存泄露。
在Person这个类里定义一个Car类型的车时,nonatomic后面用assign 或者 weak的话就只是赋值,或是一个弱指针指向车对象,当释放内存时,指向车对象的强指针被释放了后就只有一个弱指针指向,也会释放。这就可以解决上述的释放不完全的情况。
同样地,在Car类里定义Person类型的人时也可以用assign或者weak。
两个类里有一个用assign或者weak就可以解决。当然两个都用也可以。
相关文章推荐
- iOS 编译过程梳理
- 实战iOS7之NSURLSession
- iOS开发之AFNetworking
- ios 正则表达式入门
- iOS---内存分析
- iOS开发:LaunchScreen.xib好处
- iOS进阶学习笔记
- iOS开发 main.m
- 野鸟装备IOS版开发笔记(1.0版本)
- iOS 本地缓存实现 方案借鉴
- iOS动画技术——CoreAnimation中的动画
- iOS 中自定义的 xib 的宽度和高度没法改变时的解决办法
- iOS异常、错误汇总(一)
- iOS 播放音频的几种方法
- IOS开发技巧快速生成二维码
- iOS平台下的加密
- ios AVPlayer无法在线播放视频
- iOS高级-QuartzCore框架-CALayer图层
- 适用于IOS的几种必须会用的工具
- 一般企业如何处理IOS 检查更新