2011-07-30 11 views
0

目前,我正在構建我的應用商店的第一個應用程序,因此我已閱讀here,應用程序應使用少於30 MB的RAM(iPhone 3G,iPhone 4)。我已經讀過,在某個時間點,iOS會開始通過隨機查殺並釋放背景應用程序中的聲音,圖像和其他資源來搜索資源。目前,我的應用程序使用約5MB的活動字節顯示在樂器中,但我對內存感到一些偏執:)當我的iPhone3G和iPhone4定位時,應用程序使用少於10MB的應用程序時,我是否安全?什麼樣的「殭屍」應用可能會從背景中返回?

的問題是,如果一個應用程序切換到後臺,然後的iOS如何資源的多少空閒的,直到最終殺死它?如果我的應用程序轉到後臺,然後將啓動100個或更多其他應用程序,那麼我的應用程序會發生什麼情況?我不相信RAM存儲器片對於我的應用程序是靜態的,因爲每個設備中的存儲器都是有限的。恕我直言,如果你開始循環打開一個新的應用程序,將其發送到後臺,打開另一個 - 然後設備的RAM將在某個時間點被完全使用。然後,理論上,如果你嘗試打開一個新的應用程序,那麼一些第一次打開的應用程序應該會被iOS殺死......

目前,我正在用純UIKit構建小遊戲,因此我使用了很多UIView和UIViewImage對象,我不知道如何處理這個理論情況。在進入後臺時,我的應用程序可能會在遊戲UIViewImages,菜單MVC指針等等中加載很多內容。我是否需要編寫一些reloadALL方法來重新加載遊戲的每一個安靜?如果設備內存被完全使用,iOS會殺死我的整個應用程序,一切都會好的。但如果iOS會在遊戲或菜單對象中釋放一些UIViewImage,那將是不可接受的。在這種情況下,我不知道我的應用可能是什麼樣的「殭屍」(我的應用在「復活」之後可以擁有多少條腿,手臂等)。請分享你的經驗和想法:)

回答

0

,iOS將撲殺UIKit的數據(如您的圖像視圖)和任何內存NSCaches轉到後臺運行時,在必要的時候。你不需要擔心恢復這個。

但是,你仍然應該管理你自己的對象和東西;在收到適當的事件(如內存警告)時處理剔除和恢復數據。

+0

謝謝。目前,我只知道處理內存警告的一種方法:主應用程序委託類中的「applicationDidReceiveMemoryWarning:」方法。你說「處理撲殺」是什麼意思?處理內存警告的其他方法是什麼? – Centurion

+0

剔除只是一種說法「從內存中刪除」的方式。我會在應用程序委託,視圖控制器('didRecieveMemoryWarning')和'applicationDidResignActive'中處理內存警告。如果您正在尋找一種設計模式來簡化這一過程,請查看懶惰的實例。 –

+0

感謝您的信息 – Centurion

1

一旦應用已經進入後臺,系統需要更多的內存,它只是殺死轉到後臺應用,這發生之前您的應用程序不會得到任何消息。所以它的全部或沒有。

然而的iOS的存儲器管理例如支持在內存警告(當你的應用程序仍然有效,檢查UIViewController docsdidRecieveMemoryWarning系統本身如何與內存警告科佩斯)的情況下,視對象而慵懶休閒的釋放

當你的應用程序進入後臺,你可以嘗試實施類似的行爲現在 - 還可以釋放一些內存(例如,您自己的緩存或可以被懶惰地重新創建的元素),這樣應用的內存佔用就會減少。這樣做可能會幫助它被殺害之前讓自己的應用現場豆蔻背景更長。

當iOS的開始殺的應用程序,它可能會使用自己的算法,這是不neccessarily查殺最古老應用程序 - 它也可能去的最大應用程序在內存方面有較大的作用.. 。

+0

感謝您的信息 – Centurion

0

我們不應該真正關心的應用程序所使用的總圖像。內存僅用於活動屏幕中的圖像。