美文网首页原理篇程序员iOS Developer
property用了千百遍、可你真的懂atomic么

property用了千百遍、可你真的懂atomic么

作者: kirito_song | 来源:发表于2017-12-05 15:33 被阅读185次

    前文地址:《iOS基础深入补完计划》

    在前文、我们提到了property中的关键字atomic。
    那么、atomic究竟如何保证了属性的原子性。
    这种保护是否是无条件的呢。

    具体的加锁代码

     - (UITextField *) userName {
         UITextField *retval = nil;
         @synchronized(self) {
             retval = [[userName retain] autorelease];
         }
         return retval;
     }
     
     - (void) setUserName:(UITextField *)userName {
         @synchronized(self) {
           if (_userName != userName)  {
             [userName release];
             userName = [userName_ retain];
           }
         }
     }
    

    这样就保证了成员变量‘读写操作’完整性。
    在多线程下读写同一个属性、也不用担心得不到一个完整的Value。

    • ※※※那么、atomic声明的属性一定是线程安全的么。
    • 安全的情况。

    正常读写(getter/setter)


    正常读写
    • 不安全的情况

    对该对象不通过setter/getter方法的一切操作。正如上文所说:
    atomic只是在对象的读写方法内部加了一层Look。因为property的权限只能到这。那么、结果显而易见。

    1、直接进行对象操作。
    NSMArray的addobject操作

    为了进一步确定atomic的原子性是否不直接作用于成员变量上。

    2、直接进行成员变量的操作

    self.arr在写入数据的时候可以保持完好。


    WechatIMG199.jpeg

    在红色地址已经发生被释放并改变成绿色地址的情况下。对红色旧指针操作导致崩溃。

    • 至此、property声明中关于atomic/nonatomic的说明结束。
    相关阅读:《Realm》《[爆栈热门 iOS 问题] atomic 和 nonatomic 有什么区别?》《[OC]之 atomic 与 nonatomic的区别》

    相关文章

      网友评论

        本文标题:property用了千百遍、可你真的懂atomic么

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