OBjective-C:atomic和nonatomic的区别
2015-08-17 17:16
211 查看
atomic和nonatomic的区别:
atomic: 设置成员变量的@property属性时,默认为atomic,提供多线程安全。因为多线程的缘故,所有的对象在操作成员变量时都是同步的,因此,为了防止一个对象在操作数据时还没有结束就被另一个对象抢走进行篡改,atomic为此提供了多线程安全机制,采用同步加锁的方式,来控制进程的归属权。
即:
{lock} //第一个对象获取操作数据后,给自己的进程加锁,别人在我没有释放锁之前就无法再去抢夺了。
if (property != newValue) {
[property release];
property = [newValue retain];
}
{unlock}//该对象操作完数据后,就释放了同步锁,别人就可以获取这个数据进行自己的操作了。
说明:锁必须是唯一的。
nonatomic: 设置成员变量的@property属性时,设置nonatomic,禁止多线程。这就直接消除了数据操作过程中被被另一方篡改的可能性。如果不是多线程,一般就采用这种设置。
atomic: 设置成员变量的@property属性时,默认为atomic,提供多线程安全。因为多线程的缘故,所有的对象在操作成员变量时都是同步的,因此,为了防止一个对象在操作数据时还没有结束就被另一个对象抢走进行篡改,atomic为此提供了多线程安全机制,采用同步加锁的方式,来控制进程的归属权。
即:
{lock} //第一个对象获取操作数据后,给自己的进程加锁,别人在我没有释放锁之前就无法再去抢夺了。
if (property != newValue) {
[property release];
property = [newValue retain];
}
{unlock}//该对象操作完数据后,就释放了同步锁,别人就可以获取这个数据进行自己的操作了。
说明:锁必须是唯一的。
nonatomic: 设置成员变量的@property属性时,设置nonatomic,禁止多线程。这就直接消除了数据操作过程中被被另一方篡改的可能性。如果不是多线程,一般就采用这种设置。
相关文章推荐
- post a json object with an array using curl
- mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc
- Objective-C 数据类型定义的标示符(一)
- 给Objective-C的“悼词”
- javascript object 相等判断逻辑
- flex 客户端缓存SharedObject
- org.hibernate.NonUniqueObjectException
- ****Objective-C 中的方法的调用
- android Parcelable 带有数组的对象如何序列化 String[] Long[] int[] Object[]
- 【OC语言】第一篇·Objective-C概述和面向对象
- [Objective-C] 016_UI篇_UIView(上)
- sys_privilege & object_privilege
- foreach遍历----for(object o: list)
- Objective-C葵花宝典第一重(内功篇)--类与对象
- swtich/if...else的替代语句
- Objective-C 三大特征
- 《Objective-C基础教程》第17章 文件加载和保存
- Objective-C语言的 if ( self = [super init] )
- 初学Objective - C 第一天
- Objective-C Runtime (二)