ios atomic nonatomic区别
atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。
atomic
设置成员变量的@property属性时,默认为atomic,提供多线程安全。
在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
{lock}
if (property != newValue) {
[property release];
property = [newValue retain];
}
{unlock}
nonatomic
禁止多线程,变量保护,提高性能。
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定 nonatomic ,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。
- CIFilter滤镜解析:CIRadialGradient滤镜
- iOS学习资源汇总(开源项目、第三方库、技术博客等等)
- iOS常用的终端命令行
- iOS之自动释放原理
- ios 中尝试多次请求
- 友盟抓取crash Log- 解析IOS崩溃日志
- iOS 正则表达式(二) RegexKitLite使用
- iOS---MVVM初体验
- iOS之block重认识
- iOS之沙盒存储
- iOS之NSCache介绍
- iOS之第三方小结
- iOS之工厂模式介绍
- iOS之图片轮播代码共享
- iOS之程序上架注意事项
- iOS之地图定位简单介绍
- iOS dispatch_sync同步应用开发场景 自己的理解
- iOS之友盟分享
- iOS之百度云推送二
- iOS多线程的初步研究(四)-- NSTimer