2012-11-11 174 views

回答

0

沒有,也沒辦法以編程方式重新啓動iOS應用程序。應用程序的生命週期由OS控制。

5

注:

雖然這已經向下投我認爲這是一個新的iOS開發者提出一個完全有效的問題。有一種方法可以從用戶的角度'重新啓動'您的應用程序,而不是從技術上重新啓動或退出iOS應用程序。正如其他答案所指出的,iOS應用程序絕不應該明確退出,因爲iOS不允許這樣做。

我的回答:

如果你希望你的應用程序返回到它在推出的狀態,這是不是100%,可能的,但我會解釋的方式來獲得大部分的方式存在應足以滿足所有有效的目的。

首先要做的是重新創建您的根視圖控制器。我推薦的方法在應用程序委託是這樣做的:

- (void)resetAppToFirstController 
{ 
    self.window.rootViewController = [[MyMainViewController alloc] initWithNibName:nil bundle:nil]; 
} 

在許多情況下,這將是足夠的,但您有任何應用程序狀態也應該在這個方法復位。例如,註銷一個用戶,重置任何非持久狀態,然後取消(釋放)您可以的所有對象。此方法也可用於從application:didFinishLaunchingWithOptions開始創建您的第一個視圖控制器。

框架類和單身:

您將無法完全恢復情況下的任何框架單身或每個應用程序的狀態,像這樣的:

[UIApplication sharedApplication]; 
[NSNotificationCenter defaultCenter]; 
[NSUserDefaults standardUserDefaults]; 
[UIScreen screens]; 
// etc... 

這可能是罰款因爲您不應該在這些方面存儲任何非持久狀態(除了NSNotificationCenter,但所有註冊的觀察者應該在對象被釋放時被刪除)。如果您確實想要初始化或重置任何框架狀態,您可以使用相同的resetAppToFirstController方法執行此操作。無論如何,應該不需要重新創建這些對象或window對象。

如果你有任何你自己的單身人士,你可以通過將他們存儲在單身持有人類(它本身就是一個真正的單身人士)中重新創建這些單身人士。從概念上講,這是一個簡單的單身人士課程,其中包含每個其他單身人士的屬性,以及一個用於取消所有單身人士的方法並將其全部釋放的方法。你的其他單例應該使用這個類(而不是靜態或全局變量)來存儲單例實例。如果您使用任何第三方庫,請小心,因爲它們也可能使用單身人士,您需要確保這些也使用您的單身人士,以便您可以根據需要重置它們。無論如何,我認爲這種技巧是很好的做法,因爲在某些情況下(例如單元測試),您確實希望通常是單件的對象消失並重新初始化爲原始狀態。但是,您不希望將singleton實現與singleton持有者耦合,因此實現此目的的一種好方法是使用NSMutableDictionary作爲[UIApplication sharedApplication]上的關聯對象,並將singleton類名稱作爲關鍵字。不過,我會談論一些話題,因爲這是超出此問題範圍的更先進的技術。


以上應該足以'重置'您的應用程序,只要用戶關心。如果你想作爲你的第一個視圖控制器,你甚至可以再次顯示啓動畫面。

+0

http://stackoverflow.com/a/30647435/793880 –

相關問題