2011-07-05 43 views

回答

1

在iOS 4.x的更好的選擇是applicationDidEnterBackground:

事實上,根據蘋果文檔,在後臺的應用程序可以在任何時間終止內存不足的條件。因此,建議在應用程序進入後臺時持續保存任何狀態信息。

UIApplicationDelegate protocol的摘錄:

您應該使用這個方法來釋放共享資源,保存用戶數據,無效定時器和儲存足夠的應用程序狀態信息到您的應用程序恢復到其當前狀態的情況下,稍後終止。您還應該禁用應用程序用戶界面的更新,並避免使用某些類型的共享系統資源(例如用戶的聯繫人數據庫)。避免在後臺使用OpenGL ES也是必要的。

此方法的實現大約需要五秒鐘來執行任何任務並返回。如果你需要更多的時間......

+0

如果可以,隨時保存總是更好 - 因爲sergio上面提到的只有5秒鐘來執行applicationDidEnterBackground中的任何任務。 – amergin

0
蘋果文檔的applicationWillTerminate

另外:

對於不支持後臺執行或者是針對iOS的3.x的鏈接或更早版本的應用程序,這種方法始終是當用戶退出應用程序時調用。對於支持後臺執行的應用程序,當用戶退出應用程序時通常不會調用此方法,因爲在這種情況下應用程序只是移至後臺。但是,在應用程序在後臺運行(未掛起)並且系統因某種原因需要終止應用程序的情況下,可能會調用此方法。

因此,如果您特別要求不支持backgrounding爲您的應用程序,或者你對的iOS 3.x的你應該考慮在兩地(applicationWillTerminate和applicationWillEnterBackground)堅持抓情況,以及鏈接。

+0

多數民衆贊成真棒,謝謝!一個更快的問題(只是不想開始一個新的線程) - 我想轉儲到我的視圖控制器中的數組,但它不是全局的文件。我如何將它傳遞給應用程序委託?我在這裏讀了一些關於傳遞物體的地方,但沒有一個類似於這種情況。謝謝! – TommyG

+0

爲什麼你需要將它傳遞給你的應用程序委託?這聽起來像你可能從重構代碼中受益,並可能創建一個處理數據持久性的類。如果你真的想使用你的應用程序委託(我會避免),你可以通過'[[UIApplication sharedApplication]委託]獲得對它的引用,然後調用你的持久性方法並傳入你的數組? –

+0

我更喜歡避免使用應用程序委託,但最終,我將需要,因爲只有在應用程序委託我可以知道應用程序何時終止,不是嗎?你認爲創建一個處理所有數據存儲的類更好,但是,那麼我何時將它轉儲到文件?謝謝!! – TommyG

相關問題