2010-08-31 74 views
0

下面是代碼:我應該用這種方法釋放對象嗎?

- (id)copyWithZone:(NSZone*)zone { 
    ExecutedOrderInfo* copy = [[self class] allocWithZone:zone]; 
    copy.executedPrice = self.executedPrice; 
    copy.executedQuantity = self.executedQuantity; 
    return (id)copy; 
} 

的問題是,是否有必要在上面的代碼發佈「複製」?或者當有人叫它時釋放它?

回答

3

不,不是這種方法。以copy開頭的方法必須返回保留計數爲1的非自動發佈的對象。與您一樣。

PS:在return (id)copy中不需要劇組。 id是抽象的對象類型,比具體的類更普遍。僅當具有應該被視爲不同的具體類的時候才需要投射 - 在進行子類檢查之後就像子類一樣。

PPS:您的方法缺少init。這僅僅是一個實例alloc並不好。相反,做這樣的事情:[[[self class] allocWithZone:zone] init];

+0

謝謝Max,這對我很有幫助。也感謝您使用簡單的英文.. – YAMEDE 2010-08-31 01:27:00

-1

如果我正確讀取您的代碼 - 否。該方法不創建對象,因此它不需要釋放它。

+0

ExecutedOrderInfo * copy = [[self class] allocWithZone:zone] 你看到這個了嗎? – YAMEDE 2010-08-31 01:16:01

+0

'allocWithZone:'方法實際上是一個對象創建。 – 2010-08-31 01:16:36

+0

Doh!正在將其看作是工廠方法,而不是創造。是的,你的權利。這需要一個init。 – drekka 2010-08-31 01:18:44

0

最大是正確的。 但所有的設計和意圖都取決於你。 (即使通常copyXXX表示返回非自動釋放對象)

爲防止內存泄漏,請在使用靜態分析和儀器後使用它。

相關問題