2010-06-23 131 views
8

我剛拿到iPhone SDK 4,我試圖離開開發我以前工作的應用程序。所以,我實現了兩個 -(void)applicationDidEnterBackground:(UIApplication *)application- (void)applicationWillTerminate:(UIApplication *)application運行模擬器4.0的iPhone應用程序收到Sigkill

當我點擊模擬器4.0 home鍵,它似乎工作沒關係。該應用程序調用-(void)applicationDidEnterBackground:(UIApplication *)application並進入後臺狀態..然後,我然後雙擊主頁按鈕以暴露在後臺運行的應用程序,並按住它顯示減號或退出。當我點擊減號,調試器說

程序接收到的信號: 「SIGKILL」

除了

- (void)applicationWillTerminate:(UIApplication *)application不會被調用。我是否錯過了一些我需要做的工作來在OS4上工作?或者至少有人可以指點我來調試SIGKILL。謝謝。

回答

13

-applicationWillTerminate:僅當您的應用程序在要求退出時處於運行狀態時才被調用。如果它已經處於掛起狀態(就像你在這裏),系統只是發送一個kill信號給應用程序。這發生在用戶按下紅色減號按鈕手動終止應用程序時以及系統決定放棄應用程序以釋放前臺應用程序的內存時發生。

如果您的應用程序在後臺運行(例如播放音樂或運行一些後臺任務),並且用戶通過按下減號按鈕手動終止應用程序,那麼您纔會真正收到-applicationWillTerminate:消息。因此,您必須保存所有狀態/等。在從-applicationDidEnterBackground:返回之前。

+0

感謝您的答覆。有道理。不過,我還有另一個問題。當調用-applicationDidEnterBackground:時,我嘗試使用NSUserDefaults保存應用程序的狀態,但出於某種原因,我的值並非我期望它們在應用程序重新啓動時所期望的狀態。任何原因爲什麼這不會在OS4中工作? – NickDK 2010-06-24 03:19:46

+0

Nevermind ...我沒有在NSUserdefaults上調用sychronize。 – NickDK 2010-06-24 23:01:36

2

這是可以預料的多任務欄「紅色關閉按鈕」相當於強制退出Mac OS X上的應用程序。這是記錄的行爲。蘋果希望iOS 4的普通用戶簡單地啓動/使用/ dimiss應用程序,他們不需要考慮終止進程或任何事情。系統將管理它。

只要確保在應用程序中保存任何重要數據:willResignActive:或applicationWillEnterBackground。因爲在此之後,當內存壓力迫使系統清理時,可能會導致死亡...... Snow Leopard針對在Info.plist中使用NSSupportsSuddenTermination鍵的應用程序引入了類似的行爲。一個應用程序基本上告訴系統它週期性地保存它的數據,所以當它在後臺進行時,沒有什麼可以做或很少。不像大整體應用程序桌面應用程序...

相關問題