atomic 和 nonatomic 有什么区别

atomic 和 nonatomic 的区别在于,系统自动生成的 getter/setter 方法不一样。如果你自己写 getter/setter,那 atomic/nonatomic/retain/assign/copy 这些关键字只起提示作用,写不写都一样。

atomic可并不能保证线程安全。有两点:

  1. 如果线程 A 调了 [self name],与此同时线程 B 、线程 C 都调了 [self setName:@"A"]——那最后线程 A get 到的值,3种都有可能:可能是 B、C set 之前原始的值,也可能是 B set 的值,也可能是 C set 的值。同时,最终这个属性的值,可能是 B set 的值,也有可能是 C set 的值。

  2. atomic只是在存取的时候加了锁,但其他操作并没有加锁, 所以这个属性只能说是读/写安全的,但并不是线程安全的。比如上例中,同时有线程D调用了[name release],那可能就会crash,因为 release 不受 getter/setter 操作的限制。

你可能感兴趣的:(atomic 和 nonatomic 有什么区别)