2010-10-26 73 views
1

在源代码“保留”NSArray或NSMutableArray会发生什么?

@property(retain) NSString* str; 
@sythesize str; 
self.str = newStr; 

我明白其实下面会发生

if(str != newStr){ 
    [str release]; 
    str = [newStr retain]; 
} 

因此,如何对的NSArray或NSMutableArray里的情况?看起来好像很复杂,应该考虑浅拷贝和深拷贝。

回答

2

这是一样的。设置属性只会更改该数组的所有权,而不会更改数组的内容(内容由同一数组拥有)。因此,只有数组需要-retain'ed。

实际上,运行时并不关心属性的特定Objective-C类型。每个@property(retain)属性都会应用相同的setter过程。

为了让setter执行浅拷贝,请将其设置为@property(copy)。没有办法让它深拷贝。