A原理/底层iOS Developerios实用开发技巧

iOS 中定义属性时的atomic、nonatomic、copy

2016-10-14  本文已影响421人  pro648

iOS编程中,定义属性中的特性有atomic、nonatomic、copy、assign、strong、weak等,一般格式如下:

@property (nonatomic, strong) NSString *name; 

下面详细解释一下他们的区别。

atomic

例如:对于atomic的对象,线程A调用getter,同时线程B、线程C都调用setter并设不同的值,最后线程A可能得到原来的值、也可能得到线程B、线程C设的值,只能够保证得到的是原始值、B线程设定的值、C线程设定的值三者中一个完整值,没有办法确定最终得到的是哪个值。如果线程D调用release,程序会崩溃。所以atomic只是read/write安全,不是thread安全。

nonatomic

copy

assign

strong

weak

关于strong和weak对比的一个形象例子

假设对象是一条小狗,小狗想跑走(be deallocated)。

strong类型就像是拴狗的绳子,只要有一条绳子栓住狗,它就不能跑走,如果有五条绳子拴着同一条狗(五个strong类型指向同一个对象),只有当五条绳子都释放狗才可以跑走。

weak类型就像是小孩子看着小狗说:看这里有小狗。只要还有绳子拴着小狗,小孩子们就可以继续指着小狗说:看这里有小狗。当绳子释放了的时候,不管有多少小孩子依旧在指着小狗说:看这里的小狗。小狗都会跑掉。

当最后一个strong指针不再指向这个对象,这个对象就会被释放,此时,所有指向这个对象的weak指针都将被清空。

readonly

readwrite

欢迎更多指正:https://github.com/pro648/tips/wiki

上一篇下一篇

猜你喜欢

热点阅读