2011-01-08 25 views
1

我的蘋果文檔閱讀copyWithZone:copyWithZone返回值所有權和保留計數

「返回的對象是隱含由發送者,誰是負責釋放它保留」。

所以,如果我這樣寫:

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

     return obj; 
    } 

我打電話:

MyStuff* obj = [varobj copy]; 

obj被保留?如果我沒有設置autorelease,那麼保留計數如何?

回答

3

請勿在copyWithZone方法中自動釋放它,否則您將不擁有它(甚至可能無法使用它)。

刪除autorelease和obj將被適當保留在MyStuff複製中。當你完成它時,你只需要release

蘋果公司的一句話是說發件人 - 你的MyStuff *obj初始化 - 擁有所有權並需要發佈它。 「發件人」是指發送的copy消息的對象,而不是您的copyWithZone方法。

+0

@Matthew Frederick:好的,所以沒有像蘋果文檔說的那樣保留IMPLICIT。由於你的代碼,這是明確的嗎? – Oliver 2011-01-08 11:14:11