試圖執行NSCopying的第一次,我有一個關於NSZone的subleties問題:我可以使用兩次相同的NSZone嗎?
- (id)copyWithZone:(NSZone *)zone {
MyClass *copy = [[[self class] allocWithZone:zone] init];
copy.array = [[self.array mutableCopyWithZone:zone] autorelease];
return copy;
}
在這個例子中,我使用的是NSZone兩次:第一次分配的對象,然後重新分配數組的副本。這合法嗎?有必要嗎?我可以簡單地做mutableCopy,我也在使用-initWithArray:copyItems:作爲一種可能的選擇。
最好的方法是什麼?在「我是否需要生成的數組的對象是淺層還是深層拷貝?」這個問題上隨意採取任何一種方式?對我來說關鍵是兩次使用NSZone是否安全。
嗨,你沒有問題是正確的,謝謝。您能否詳細說明這會如何影響NSCopying?我現在比以前更*迷惑了。符合NSCopying的原因是你可以說[aDictionary setObject:x forKey:myNSCopyingObject]。你對NSZone的評論帶來了如何正確符合協議的問題。顯然,我剛開始使用Apple模板,他們顯然沒有更新。 – SG1 2012-02-20 03:36:09
@ SG1:複製和創建原始對象一樣。你可以使用區域,至少在名義上(因爲區域不再有任何真正的事情),或者假裝區域不存在,只需在你的實現中使用'alloc' /'copy' /'mutableCopy'即可。你的選擇。 – 2012-02-20 03:41:57