美文网首页工作生活
iOS学习笔记-atomic和nonatomic的区别

iOS学习笔记-atomic和nonatomic的区别

作者: Mr_Ten | 来源:发表于2019-07-04 11:05 被阅读0次
    1.Atomic

    默认的
    会保证CPU能在别的线程来访问这个属性之前,先执行完当前流程
    速度不快,因为要保证操作整体完成

    对于atomic的属性,系统生成的 getter/setter 会保证 get、set 操作的完整性,不受其他线程影响。比如,线程 A 的 getter 方法运行到一半,线程 B 调用了 setter:那么线程 A 的 getter 还是能得到一个完好无损的对象。
    不过atomic也并不能完全保证线程安全。如果线程 A 调了 getter,与此同时线程 B 、线程 C 都调了 setter——那最后线程 A get 到的值,3种都有可能:可能是 B、C set 之前原始的值,也可能是 B set 的值,也可能是 C set 的值。同时,最终这个属性的值,可能是 B set 的值,也有可能是 C set 的值。

    2.Non-Atomic

    不是默认的
    速度更快
    线程不安全
    如果有两个线程访问同一属性,会出现无法预料的结果

    3.总结

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

    相关文章

      网友评论

        本文标题:iOS学习笔记-atomic和nonatomic的区别

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