atomic/nonatomic/retain/assign/copy

本文深入探讨了Objective-C中的atomic与nonatomic的区别,解释了它们如何影响线程安全及性能,并强调了在使用property时选择nonatomic的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

atomic/nonatomic/retain/assign/copy

nonatomic vs. atomic 

"atomic" 是默认的,通常使用 "nonatomic".如果使用atomic,如其名,它会保证每次getter和setter的操作都会正确的执行完毕,而不用担心其它线程在你get的时候set,可以说保证了某种程度上的线程安全。但是,我上网查了资料,仅仅靠atomic来保证线程安全是很天真的。要写出线程安全的代码,还需要有同步和互斥机制。

  而nonatomic就没有类似的“线程安全”(我这里加引号是指某种程度的线程安全保证)。因此,很明显,nonatomic比atomic速度要快。这也是为什么,我们基本上所有用property的地方,都用的是nonatomic了。


retain vs. copy vs. assign
"assign" 是默认的使用 @synthesize 创建的 setter 该值将被简单地分配给属性,我的理解是,“分配”应当用于非指针属性。
"retain" 的属性需要的是一个指向对象的指针。@synthesize 所产生的二传手将对象保留(又名添加一个保留计数)。当你完成它,您将需要释放的对象。
"copy" 的属性需要的是一个可变的对象。如果你需要这个对象的当前值,但你不希望这个对象的其他拥有者修改他你可以使用 copy 。当你完成了它,您将需要释放这个对象,因为你保留他的副本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值