ios 属性中常用修饰词的总结
2016-03-29 10:22
323 查看
一、assign (ARC/MRC)
1、assign在ARC和MRC中都是存在的
2、assign一般用来修饰基本数据类型
3、assign也可用来修饰对象,但是,对象的引用计数不会+1(与strong的区别)
4、assign如果用来修饰对象属性,当对象销毁后指针不会指向nil,会出现野指针错误(与weak的区别)
5、在MRC用assign来修饰代理,是为了防止循环引用。
二、weak(ARC)
1、弱指针是针对对象的修饰词 , 就是说它不能修饰基本数据类型 。
2、weak修饰的对象,引用计数不会+1,即直接赋值
3、弱引用是为打破循环引用而生的
4、它所指向的对象如果被销毁 , 它会指向 nil . 而 nil 访问什么鬼都不会报野指针错误 .
三、strong(ARC)
1、直接赋值,对象引用计数+1
2、功能等价于MRC里面的retain
四、copy(ARC/MRC)
1、在 MRC 时是这样做的 release 旧对象( 旧对象计数器 -1 ) , copy 新对象( 新对象计数器 +1 ) , 然后指向新对象 。
2、在 ARC 时是这么干的 copy 新对象( 新对象计数器 +1 ) , 然后指向新对象 。
五、原子属性(atomic)和非原子属性(nonatomic)(ARC/MRC)
非原子属性(nonatomic):
1、不对set方法加锁(@synchronized),互斥锁是利用线程同步实现的 , 意在保证同一时间只有一个线程调用 set 方法 。
2、性能好
3、线程不安全
原子属性(atomic):
1、原子属性就是对生成的 set 方法加互斥锁 @synchronized(锁对象)
2、需要消耗系统资源
3、还有 get 方法 , 要是同时 set 和 get 一起调用还是会有问题的 . 所以即使用了 atomic 修饰 还是不够安全 .
六、readOnly(只读)、readWrite(读写)
readOnly:
1、只读属性,意味着只合成getter方法
2、不想把暴露的属性被别人替换,可以使用readOnly修饰
readWrite:
1、生成getter和setter方法
2、不用readOnly修饰时候,默认为readWrite
1、assign在ARC和MRC中都是存在的
2、assign一般用来修饰基本数据类型
3、assign也可用来修饰对象,但是,对象的引用计数不会+1(与strong的区别)
4、assign如果用来修饰对象属性,当对象销毁后指针不会指向nil,会出现野指针错误(与weak的区别)
5、在MRC用assign来修饰代理,是为了防止循环引用。
二、weak(ARC)
1、弱指针是针对对象的修饰词 , 就是说它不能修饰基本数据类型 。
2、weak修饰的对象,引用计数不会+1,即直接赋值
3、弱引用是为打破循环引用而生的
4、它所指向的对象如果被销毁 , 它会指向 nil . 而 nil 访问什么鬼都不会报野指针错误 .
三、strong(ARC)
1、直接赋值,对象引用计数+1
2、功能等价于MRC里面的retain
四、copy(ARC/MRC)
1、在 MRC 时是这样做的 release 旧对象( 旧对象计数器 -1 ) , copy 新对象( 新对象计数器 +1 ) , 然后指向新对象 。
2、在 ARC 时是这么干的 copy 新对象( 新对象计数器 +1 ) , 然后指向新对象 。
五、原子属性(atomic)和非原子属性(nonatomic)(ARC/MRC)
非原子属性(nonatomic):
1、不对set方法加锁(@synchronized),互斥锁是利用线程同步实现的 , 意在保证同一时间只有一个线程调用 set 方法 。
2、性能好
3、线程不安全
原子属性(atomic):
1、原子属性就是对生成的 set 方法加互斥锁 @synchronized(锁对象)
2、需要消耗系统资源
3、还有 get 方法 , 要是同时 set 和 get 一起调用还是会有问题的 . 所以即使用了 atomic 修饰 还是不够安全 .
六、readOnly(只读)、readWrite(读写)
readOnly:
1、只读属性,意味着只合成getter方法
2、不想把暴露的属性被别人替换,可以使用readOnly修饰
readWrite:
1、生成getter和setter方法
2、不用readOnly修饰时候,默认为readWrite
相关文章推荐
- iOS开发-"performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
- ios设备运行出现 ”A valid provisioning profile for this executable was not found“的解决
- IOS中定时器NSTimer
- iOS开发 - 打开文件后进行文件分享(QLPreviewController)
- ios TableView性能优化技巧
- iOS 初始化单例
- iOS同一label设置不同颜色
- ios 星星评分(支持点击和滑动)
- iOS开发-系统级分享
- ios中json解析出现的null问题
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- 【代码笔记】iOS-获得设备型号
- iOS 最新版 CocoaPods 的安装流程
- iOS 代码取得到 Storyboard和XIB控件,控制器
- iOS调用系统功能
- iOS nib file owner
- iOS:代理(delegate)理解及使用
- iOS基础视频_适合初学者入门
- iOS程序运行流程
- 选择ios应用开发培训还是安卓软件培训?