2012-01-16 45 views
2

我想複製或克隆自己寫的類的對象。 但是,如果我調用複製功能,只有指針被複制。所以如果我改變複製的對象,原來的對象也會改變。IPhone:Copy/Clone

有沒有一種方法/函數來真正克隆一個對象?

問候 梅拉妮

回答

2

一個對象可以如果它的類採用NSCopying協議並實現它的一個方法,copyWithZone:被複制。

Object copying


- (id)copyWithZone:(NSZone *)zone{ 
    MyClass *copy = [[[self class] allocWithZone: zone] init]; 
    [copy setProperty1:[self property1]]; 
    return copy; 
} 
+1

我已經閱讀過這個。但我真的不明白什麼區域是? 「區域標識要爲新實例分配的內存區域,如果區域爲NULL,則新的實例從默認區域分配,該區域從函數NSDefaultMallocZone返回。」那麼我需要爲Zone編寫什麼? – DeFlo 2012-01-16 10:57:02

+0

@MeMa,好評。我認爲你不需要擔心NSZone,只需使用默認區域即可。 NSZone允許存儲分配,處理和釋放對象的信息。 – beryllium 2012-01-16 11:19:15

+0

請參閱此文檔http://www.cocoadev.com/index.pl?NSZone – beryllium 2012-01-16 11:19:46

1

你是什麼後refered爲深複製,要複製一個指針的內容,而不是它的地址指向。

有關於這個列表下面的幾個堆棧溢出問題:

此外這裏從Techtopia一個文章:Here

廣告這裏是我的谷歌搜索:Here

+0

謝謝。我不知道這被稱爲深拷貝:-) – DeFlo 2012-01-16 11:49:51