美文网首页
atomic与内存管理

atomic与内存管理

作者: 偶是星爷 | 来源:发表于2017-12-08 15:23 被阅读28次

原子操作保证数据完整性,稍有编程经验的人都很清楚。但是大多数人的思想还停留在C语言时代,认为不加保护只会导致数据错乱。但是在OC里,这种错误会将直接导致Crash。

举例来说,下面代码

@interface MyTimer()
@property (atomic) NSObject *caller;
@end

- (void)setNew {
    _caller = [NSObject new];
}

_caller赋值这句在ARC环境下,包含了三次操作

  • tmp = _caller
  • _caller = [NSObject new];
  • [tmp release]

在多线程调setNew方法,会有两种情况

  1. 两个线程tmp指向同一个对象,那么就会重复release。
  2. _caller被写入脏数据,直接导致release时crash

所以,一般情况下尽量不要用nonatomic,同时避免直接访问ivar(init方法中除外)。

相关文章

网友评论

      本文标题:atomic与内存管理

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