iOS中atomic和nonatomic的区别

atomic nonatomic 的区别:系统自动生成的 getter/setter 方法不一样。(如果自己写 getter/setter,那 atomic/nonatomic/retain/assign/copy 这些关键字只起提示作用,写不写都一样)。


atomic:系统生成的 getter/setter 会保证 getset 操作的完整性,不受其他线程影响。比如,线程 A getter 方法运行到一半,线程 B 调用了 setter:那么线程 A getter 还是能得到一个完好无损的对象。(多线程中)


nonatomic:就没有这个保证了。所以,nonatomic的速度要比atomic快。(我们程序中很少用多线程所以常用nonatomic)。


不过atomic可并不能保证线程安全。如果线程 A 调了 getter,与此同时线程 B 、线程 C 都调了 setter——那最后线程 A get 到的值,3种都有可能:可能是 BC set 之前原始的值,也可能是 B set 的值,也可能是 C set 的值。同时,最终这个属性的值,可能是 B set 的值,也有可能是 C set 的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值