2010-10-06 42 views
1

我必須用didRecieveMemoryWarning方法去底部。我在這個論壇上閱讀過像這個主題的三十個主題。和答案是differerent。用didRecieveMemoryWarning去底部

  1. 第一個問題。如果您在didRecieveMemoryWarning中釋放對象,或者只是將其設置爲,那麼將它們設置爲?或兩者?

  2. 我讀過我應該在didRecieveMemoryWarning方法中釋放tableView數據源(如果有的話)。我也讀過,你應該只是釋放IBOutlets我這種方法。我很困惑,這裏有什麼是正確的?

  3. 它只是我在viewDidLoad中發起的對象,我應該在didRecieveMemoryWarning中發佈?或者是我剛分配的屬性,例如:labelTitleText.text = @"Woodie Guthrie"? labelTitleText是我的頭文件中的一個屬性。

在我的申請,我今天的一切釋放(還授予分配了類似上面的例子),在我的dealloc方法。這感覺不對。

我真的很感激一個小的代碼示例,所以它變得更容易理解,這是其他線程所缺少的,我已經注意到了。

祝您有個美好的一天!

回答

2

底線是,當你得到內存警告時,你實際上並不需要釋放任何東西。然而,什麼都不做會大大增加一些應用程序被殺的可能性,而這個應用程序可能是你的。但它可能不是。

如果你實際上正在使用你分配的所有內存(例如沒有圖像,你可以稍後重新加載等),那麼不要做任何事情(或保存重要的狀態以防萬一),並希望其他後臺進程被殺死或餓死。比你想象的更多的應用程序。

如果您確實有東西可以發佈,請發佈大內容(至少1個VM頁面或更大)。釋放小東西(短字符串等)對於某些後臺應用程序是否被殺或餓死幾乎沒有影響。

將指針(或對象)設置爲零而不釋放內存(或釋放對象)是非常糟糕的形式,因爲這隻會泄漏內存並且會增加發生錯誤事件的可能性。釋放/釋放內存/對象後,您可以將它們設置爲零。

2

didRecieveMemoryWarning在手機內存不足時被調用。您應該釋放任何資源,稍後您可以在需要時檢索這些資源。考慮緩存,未使用的對象和那種東西。

這是我的理解,你不應該發佈IBOutlets等在didRecieveMemoryWarning,因爲這些是需要的應用程序正常工作。

然而,你應該像viewDidUnload那樣在dealloc中釋放這些方法,正如你所說的那樣。 (如果你在某些時候保留了它們,最有可能使用財產)