atomic和nonatomic的区别
2015-08-23 20:31 lvjun70 阅读(82) 评论(0) 收藏 举报两者是用来决定编译器生成getter和setter是否为原子操作
设置成员变量@property属性的时候,默认为atomic,提供多线程安全。
在多线程的环境下,原子操作时必要的,否则有可能引起错误的结果,加了atomic,setter函数会变成如下:
{lock}
if (property != newValue) {
[property release];
property = [newValue retain];
}
{unlock}
atomic时objective-c使用的一种线程保护技术,基本上讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制时耗费系统资源的,所以在iPhone这种小型设备上如果没有使用线程的通讯编程,那么nonatomic时一个非常好的选择
指出访问器不是原子操作,而默认的,访问是原子操作,也就是说,再多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也在对其进行访问,如果你不指定nonatomic,在自己管理内存环境中,解析的访问器保留并自动释放返回值,如果指定了nonatomic,那么访问器知识简单的返回这个值
浙公网安备 33010602011771号