2009-09-14 78 views
0

我的iPhone應用程序在部署到設備時遇到問題,主要是因爲我迄今尚未處理內存警告(在模擬器中沒有問題,在我的開發機器上有4GB內存!)。沒有問題,我只需要更巧妙地處理這些警告(不那麼勉強......)。didReceiveMemoryWarning/viewDidUnload釋放了哪些內存?

問題是,運行時發佈的內存是什麼...只是視圖和子視圖?我懷疑這只是這些,但要確保運行時不會取消引用控制器中的任何對象或內存(即不在視圖中)。

問題:如果它只是視圖和子視圖,我是否需要在viewDidLoad中做任何特殊的操作來確保當視圖返回到內存時視圖顯示正確的數據,還是全部通過我的自動處理IBOutlet中-S?

回答

2

視圖或其子視圖可能會緩存許多事物 - 例如圖像數據。這些都是將被清除的東西。 任何與您的應用程序相關的特定應用程序都需要通過處理該回調來實現。

但是,這可能更多地表明您要麼泄漏內存,要麼不像您那樣高效。當然值得使用Leaks工具在Instruments中運行應用程序,以及使用CLANG編譯器的靜態代碼分析器運行。另外,檢查你的代碼,看看你是否堅持你不需要的內存塊 - 是否可以壓縮更多的圖像等。

請記住,在3​​GS或最新的iPod touch之前,系統內存爲128Mb ,但你應該只指望有大約25-30Mb可用於您的應用程序

+1

我認爲要記住的一個關鍵是運行時不會爲您釋放任何東西。你可以清除的東西類型是任何你可以再次加載的數據(沒有大的打擊),圖像等目前沒有顯示等,但它取決於你的應用程序的上下文 還值得記住的是,通知是一個警告你的應用程序清理,並且你有責任擺脫你目前不需要的任何內存。 '警告'如果未被注意將導致操作系統終止您的應用程序。 – Kevin 2009-09-14 08:25:30

+0

難道你不是指128MB和25-30MB? – mahboudz 2009-09-14 09:33:38

+0

有道理,運行時不會在幕後發佈任何東西,我的應用程序只是被警告......但運行時/內存管理器正在卸載視圖。這不會節省一些內存嗎? 此外,我的應用程序在消耗7-8MB的內存後,正在接收和關閉這些警告。泄漏工具顯示一個泄漏,但只有32個字節,所以認爲不是一個嚴重的問題(儘管它讓我感到厭煩!)。 – mblackwell8 2009-09-14 21:30:21

0

既不viewDidUnload也didRecieveMemoryWarning自動釋放任何東西。您需要重寫這兩種方法。

通常,viewDidUnload應該在視圖中釋放任何未在IB中創建的視圖,並且可以在視圖再次加載時合理地處理重新加載。

而didRecieveMemoryWarning是當系統內存不足時發送到您的應用程序的消息。當您的應用收到此消息時,您應該發佈任何您不需要的任何內容,或者冒着系統強行關閉應用的風險。