美文网首页
谈谈对atomic和nonatomic的 理解

谈谈对atomic和nonatomic的 理解

作者: 念不知何起 | 来源:发表于2020-02-19 21:08 被阅读0次

atomicnonatomic的主要区别是系统主动生成的getter/setter方法不一样

    atomic 系统主动生成的getter/setter方法会进行加锁操作

    nonatimic系统主动生成的getter/setter方法不会主动进行加锁操作

atomic:

    系统生成的getter/setter方法会进行加锁操作,这个所仅仅保证了getter和setter存取方法的线程安全

    因为getter/setter方法加锁的缘故,所以在别的线程来读写这个属性之前,会先执行完当前操作

atomic是线性安全的吗?

    不是,atomic仅仅是getter/setter方法进行了加锁操作,仅仅保证了读写是安安全的,并非真正意义上的线性安全,因为线性安全除了读写外还有其他操作

nonatomic:

    系统生成的setter/getter方法没有加锁

     线程不安全,但是更快

    当多个线程访问同一个属性会出现无法预料的结果

内部实现:

       nonatomic

//set

- (void)setIcon:(UIImage *)icon {

    if(_icon != icon) {

        _icon = icon;

    }

}

//get

- (UIImage *)icon {

    return _icon;

}

atomic

//set

- (void)setIcon:(UIImage *)icon {

//同步代码块

    @synchronized (self) {

        if(_icon1 != icon1) {

            _icon1 = icon;

        }

    }

}

//get

- (UIImage *)icon {

    UIImage *image = nil;

    @synchronized(self) {

        image = icon;

    }    

return image;

}

相关文章

网友评论

      本文标题:谈谈对atomic和nonatomic的 理解

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