2010-08-22 122 views
1

大家好,iPhone:離開應用程序的正確方法是什麼?

與iOS 4,iPhone支持多任務,什麼是非常好的,但我不希望在我的應用程序支持的東西。我的意思是,當用戶按下主頁按鈕時,我希望我的應用程序完成並且不要在背景中輸入。在iOS 4中,當用戶按下主頁按鈕時,應用程序調用applicationDidEnterBackground:delegate的方法在後臺輸入,並且當用戶按下主頁按鈕時強制應用程序結束,我已經完成了以下操作執行:

- (void)applicationDidEnterBackground:(UIApplication *)application { 
     //save everything... 
    exit(0); 
} 

問題:我注意到,該出口(0)立即帶來了應用程序完成,而無需調用重新分配的方法,如「dealloc的」,我認爲這不是一個良好的編程風格。所以我想問你們,如何讓應用程序以「更好」的方式完成。

在此先感謝。

+0

[正確的方式退出iPhone應用程序?](http://stackoverflow.com/questions/355168/proper-way-to-exit-iphone-application) – dbr 2010-08-22 08:04:40

+0

您可以在這裏找到答案:http ://stackoverflow.com/questions/3268182/iphone-4-0-programming-disabling-multitasking - 也是,'exit(0)'不是退出iOS應用程序的正確方法。 – BoltClock 2010-08-22 08:04:52

回答

4

你真的想不退出應用程序(這是因爲提到不允許的),但告訴操作系統你寧願你的應用被殺死,而不是轉到後臺什麼。

有一個info.plist鍵,UIApplicationExitsOnSuspend。將你的info.plist設置爲TRUE(選中),然後當你的應用進入後臺時,它將被終止。

+0

這是正確的,但實際上,爲什麼你不想支持至少快速的應用程序切換?它有助於用戶,而且不難實現。請記住,快速應用切換不會佔用CPU週期或浪費電池。該應用程序沒有運行,只是在內存中凍結。讓操作系統決定何時完全關閉它。它足夠聰明。 – 2010-08-22 08:51:53

+0

感謝Helmstetter和Pumbaa80的回答,你給了我一個比我期待的更好的答案。是的,Info.plist上的這個布爾值爲我工作。 @Joost Schuur:是的,我可以,但它不會改變一切:當程序啓動或「完成加載」時,它必須從服務器上載xml以顯示它的內容。因此,實施多任務並不是什麼大問題。多任務取決於你的目標和設計模式。 – jcdmb 2010-08-22 15:24:51

+0

你應該停止將其視爲,並稱之爲「多任務」。快速切換應用程序的目的是在您追蹤到其他應用程序後返回應用程序時提高應用程序的響應速度。直到您加載的XML數據過期了多久?如果有人加載您的應用程序,花費30秒鐘,檢查一封電子郵件,然後回到它,你不能使用舊的數據副本?爲什麼當應用程序重新從頭開始重新加載它?這不是關於在後臺運行應用程序。這是關於創業經驗。 – 2010-08-22 17:05:18

0

你是不允許的。我從經驗中知道:因爲我退出了蘋果應用程序的拒絕(這是兩年半前,但我懷疑他們已經改變了他們的政策)。在UIApplication,IIRC上有一個「私有」(即在頭文件中沒有提到)方法「終止」。但是蘋果說你可能不會那樣做。只有你可以做的是顯示一個對話框,要求用戶按主頁按鈕。但是如果在啓用了多任務的設備上反過來又不起作用......所以我想你必須改變你的應用程序,以便你可以在applicationDidEnterBackground上拋棄你的狀態並重新開始applicationDidBecomeActive上的應用程序。

+0

實際上,我們被允許從iOS 4中的後臺功能中排除應用程序 - 這是一個確切的事情。查看上面鏈接的複製問題。 – BoltClock 2010-08-22 08:06:40

+0

到目前爲止,我已經看到兩個帶有退出按鈕的遊戲,我真的很討厭這個程序。但是你不必支持多任務處理。 – Eiko 2010-08-22 08:22:22

1

上面的一個答案說:「有一個info.plist鍵,UIApplicationExitsOnSuspend。在你的info.plist中設置爲TRUE(選中),然後當你的應用程序進入後臺時,它將被終止。使用Xcode 4時,info.plist的值是布爾類型的「應用程序不在後臺運行」,因此將其設置爲YES會在用戶按下「home」按鈕時退出應用程序。