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

前文地址:《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)


property用了千百遍、可你真的懂atomic么_第1张图片
正常读写
  • 不安全的情况

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

1、直接进行对象操作。
property用了千百遍、可你真的懂atomic么_第2张图片
NSMArray的addobject操作

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

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

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


property用了千百遍、可你真的懂atomic么_第3张图片
WechatIMG199.jpeg

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

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

最后

本文主要是自己的学习与总结。如果文内存在纰漏、万望留言斧正。如果不吝赐教小弟更加感谢。

你可能感兴趣的:(property用了千百遍、可你真的懂atomic么)