atomic
是默认的
对同一对象的set和get的操作是顺序执行的
速度不快,因为要保证操作整体完成
线程安全,需要消耗大量系统资源来为属性加锁
使用atomic并不能保证绝对的线程安全,对于要绝对保证线程安全的操作,还需要使用更高级的方式来处理,比如NSSpinLock、@syncronized等
nonatomic
不是默认的
更快
如有两个线程访问同一个属性,会出现无法预料的结果
非线程安全,适合内存较小的移动设备
在不添加atomic或nonatomic的情况下,默认的是atomic
atomic修饰的属性,系统生成的 getter/setter 会保证 get、set 操作的完整性,不受其他线程影响。比如,线程 A 的 getter 方法运行到一半,线程 B 调用了 setter:那么线程 A 的 getter 还是能得到一个完好无损的对象。
nonatomic修饰的属性,不做保持getter完整性保证,但在运行速度上要比atomic快。
网友评论