美文网首页
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