美文网首页
iOS atomic 和 nonatomic 区别

iOS atomic 和 nonatomic 区别

作者: 阿木小丸子 | 来源:发表于2023-07-17 17:33 被阅读0次

atomic和nonatomic的主要区别在于系统生成的getter和setter方法不同。

atomic:

  • 声明属性时在不添加atomic和nonatomic的情况下,默认是atomic
  • 对同一对象的set和get是顺序执行的
  • 速度较慢,因为要保证操作整体完成
  • 线程安全(但也不是绝对安全),需要消耗大量的系统资源来为属性加锁。

nonatomic:

  • 不是默认的
  • 线程不安全
  • 更快

@property (atomic , strong) NSString *name;

如果:
线程A调用[self setName:@""]
线程B调用[self setName:@""]
线程C调用[self name]
所有这些线程上的操做都会依次顺序执行,也就是说其中一个线程在执行getter或setter操作时,其他线程必须等待,所以name属性的读/写是安全的。
线程D调用[name release]
可能会造成crash,因为release不受getter或setter操作的限制。因此atomic只是读写安全,并不能保证线程安全,因为别的线程还能进行读写之外的操作。

相关文章

网友评论

      本文标题:iOS atomic 和 nonatomic 区别

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