2011-03-31 90 views
1

我正在創建自定義UITableViewCell的子類。超類有一些它在dealloc方法中釋放的屬性。我在我的子類中添加了一個附加屬性,所以我確保重寫dealloc方法並釋放我的新屬性。Objective C:子類化,覆蓋dealloc

我的問題是,由於我重寫了dealloc方法,會在超類dealloc方法中釋放的屬性沒有被釋放(我在調用[super dealloc])嗎?我是否需要在我的dealloc方法中專門發佈這些內容?

+0

儘量不要混淆「覆蓋」和「覆蓋」。請參閱[這個SO問題](http://stackoverflow.com/q/4738315/643383)討論兩者之間的區別。 – Caleb 2011-03-31 19:12:31

回答

7

如果您致電[super dealloc],那麼將繼續運行-dealloc的超類實現。超類應該負責釋放自己的屬性。所以不,你不需要釋放超類屬性。事實上,這樣做可能會導致應用程序崩潰。

+2

不是「不需要」,而是**不能**釋放超類的數據。 – Richard 2011-03-31 19:01:38

+0

是的。我已經更新了我的答案以表明這一點。 – 2011-03-31 19:02:38

2

如果你打電話[super dealloc],你很好。該方法不知道它是由子類調用還是直接由運行時調用,並且它將一如既往地完成其常規工作並照顧自己的屬性。

2

重要:呼叫[super dealloc]最後在-dealloc方法,你自己的實例變量,做別的之後,你需要在-dealloc做。當該方法返回時,對象中不會有任何東西。