2011-01-08 75 views
0

我在蘋果文檔中閱讀了有關copyWithZone的內容:「返回的對象由發件人隱式保留,負責釋放它」。 但是...我怎麼能釋放我回來的東西......我要瘋了!iPhone:copyWithZone:在返回之前釋放一個對象?

示例代碼:

- (id)copyWithZone:(NSZone *)zone { 
     MyObject* obj = [[[self class] allocWithZone:zone] init]; // explicit retain 
     [obj fillTheObj]; 

     return obj; // implicit retain 
    } 

凡應該是告訴釋放? 我保留兩次?呃...

回答

1

發件人負責發佈。這意味着誰打電話給你的複製方法取得所有權,即:

MyObject *obj = ... 
MyObject *aCopy = [obj copy]; 
... do stuff with aCopy 
[aCopy release]; 
+0

Okkkk,呼叫的發件人,而不是對象的發件人。這更清楚。但我真的很瘋狂。所以...我可以通過myObject.var = [localvar copy]將myObject中的屬性定義爲retain,並在dealloc中發佈。那會很好,不是嗎? – Oliver 2011-01-08 01:42:39

相關問題