2010-09-16 115 views
6

我正在製作一款iPhone遊戲。我想釋放已分配或保留的所有對象。在dealloc函數中,我釋放了所有這樣的對象,但後來我意識到有時我最終會在尚未分配對象時釋放對象。所以我想我需要檢查其retainCount是否大於零或不釋放它之前。我釋放分配或保留的對象多少次?

我的問題是:

難道我只是檢查是否retainCount大於零,然後再釋放?

if([bg retainCount]!=0) 
{ 
    [bg release]; 
} 

我應該釋放它多次作爲其retainCount

while([bg retainCount]!=0) 
{ 
    [bg release]; 
} 

感謝您的幫助!

+23

任何對象的'retainCount'都是**您的業務**。它在那裏作爲一種調試手段,但僅此而已。生產代碼永遠不應該依賴它。 – Sven 2010-09-16 21:11:00

+9

順便說一句 - 不是它使代碼正確 - 但根據定義,'retainCount'永遠不會返回0,因爲該對象已被釋放的時間發生..... – bbum 2010-09-16 21:14:22

+0

此外,請嘗試使用「構建&分析「(即Clang分析器)。它可能會指出你出錯的地方。 – 2010-09-17 00:18:14

回答

77

請勿使用-retainCount。

對象的絕對保留數是沒有意義的。

您應該致電release完全相同的次數導致對象被保留。沒有更少(除非你喜歡泄漏),當然,沒有更多(除非你喜歡崩潰)。

查看Memory Management Guidelines的全部細節。

+10

你應該在某處紋身。 – 2010-09-16 21:11:44

+4

@bbum:rdar:// 8122368(http://openradar.appspot.com/8122368對於我們所有的非蘋果人) – 2010-09-16 21:20:07

+0

我還沒有使用retainCount到目前爲止,但想知道如果我應該。感謝您的清除:) 當玩家在遊戲中死亡時,我正在分配前景圖像。現在,如果玩家完成關卡而不死於整個關卡,那麼在dealloc中,我該如何檢查是否應該釋放前景。我只是用旗子來檢查foregrounf是否被使用過? – abhinav 2010-09-16 21:31:02

相關問題