在源代码中
@property(retain) NSString* str;
@sythesize str;
self.str = newStr;
我明白以下情况会发生
if( str != newStr ){
[str release];
str = [newStr retain];
}
那么NSArray或NSMutableArray的案例怎么样?看起来它很复杂,应该考虑浅拷贝和深拷贝。
答案 0 :(得分:2)
它是一样的。设置属性只会更改该数组的所有权,而不会更改数组的内容(内容由同一个数组拥有)。因此,只有数组需要-retain
'。
实际上,运行时并不关心属性的特定Objective-C类型。相同的setter过程将应用于每个@property(retain)
属性。
要使setter执行浅层复制,请将其设为@property(copy)
。没有办法让它深刻复制。