atomic
atomic 的本意是指属性的存取方法是线程安全(thread safe).但不保证整个对象都是线程安全的。比如声明一个atomic修饰的NSMutableArray变量marray,此时self.marray和self.marray = otherarray都是线程安全的。但是使用[self.marray objectAtIndex:index]就不是线程安全的,需要配合其他线程安全技术来保证。
Atomic不能保证对象多线程的安全。所以Atomic 不能保证对象多线程的安全。它只是能保证你访问的时候给你返回一个完好无损的Value而已。举个例子:
如果线程 A 调了 getter,与此同时线程 B 、线程 C 都调了 setter——那最后线程 A get 到的值,有3种可能:可能是 B、C set 之前原始的值,也可能是 B set 的值,也可能是 C set 的值。同时,最终这个属性的值,可能是 B set 的值,也有可能是 C set 的值。所以atomic可并不能保证对象的线程安全。
nonatomic
nonatomic:对应的就不考虑线程安全
说明:atomic要比nonatomic性能慢很多。你想嘛,atomic每次访问Set、get方法之前都加一把锁,性能低很多