美文网首页
atomic和nonatomic

atomic和nonatomic

作者: 大长腿裤子太短 | 来源:发表于2021-12-23 14:58 被阅读0次

    一个类可能会有多个属性,而用来修饰属性的关键字有很多,我们也会经常遇到下面的面试题:atomic 和 nonatomic都可以用来修饰一个属性,为什么iOS开发中通常用nonatomic修饰属性?atomic是线程安全的吗?

    @property(copy)NSString*address;

    @property(atomic,copy)NSString*address;

    @property(nonatomic,copy)NSString*address;

    通常回答都会这样说:

    atomic线程安全,性能低于nonatomic。noatomic不保证线程安全。

    刨根问题的回答其实可以这样说:

    1>第一种方式和第二种方式其实是一样的,因为不写atomic的话本身默认atomic修饰。

    2>atomic说它是线程是安全的,是因为查看源码后可以发现,在对属性address,在编译器为我们生成setter和getter方法的时候,对getter和setter方法内部实现会做加锁的操作,加锁的目的就是为了保证存取值的安全性/完整性,也就是说getter和setter方法内部对于值的存取是线程安全的,并不能保证操作这个属性的时候是线程安全的。正因为如此,atomic线程是依次执行,性能大有折扣。相比nonatomic,会有多个线程对getter和setter方法操作,无法保证顺序性,也无法保证存取值的安全性和完整性,性能自然就比较高速。

    set get

    相关文章

      网友评论

          本文标题:atomic和nonatomic

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