美文网首页
atomic 和 nonatomic 有什么区别

atomic 和 nonatomic 有什么区别

作者: 昵称nickName | 来源:发表于2018-08-08 14:43 被阅读0次

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 有什么区别

      本文链接:https://www.haomeiwen.com/subject/jztxbftx.html