2010-10-26 75 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)。沒有辦法讓它深拷貝。