问题
网上流传的IOS或者Mac OS X源码内,某些属性特质会被声明为nonatomic,nonatomic代表什么含义?
解答
我先说结论:
1、在进行IOS开发时,应将所有属性声明为nonatomic,aotomic属性会严重影响性能。
2、在开发Mac OS X程序时,使用atomic属性通常不会有性能瓶颈。
首先,nonatomic与atomic是对立的,默认属性特质是atomic。
nonatomic与atomic的区别在于,具备atomic特质的获取方法会通过锁定机制来确保其操作的原子性,两个线程读写同一属性,不论何时,总能看到有效的属性值。
如果使用nonatomic,当其中一个线程在改写某属性时,另外线程也许会突然闯入,把尚未修改好的属性值读取出来,当这种情况发生时,线程读到的属性值可能不对。
在开发IOS时,应将所有的属性都应该声明为nonatomic。原因是,在IOS中使用同步锁的开销较大,会带来性能问题。
一般情况下并不要求属性必须是“原子的”,因为这并不能保证“线程安全”,若要实现“线程安全”的操作,还需采用更为深层的锁定机制才行。
例如,一个线程连续多次读取到某属性值的过程中有别的线程同时改写该值,那么即使将属性声明为atomic,也还是会读到不同的属性值。
以上答案来自《Effective Objective-C 2.0》第6条:理解“属性”这一概念。










网友评论