重複の可能性:
iPhoneアプリをプログラムで強制的に再起動する
プログラムでiPhone/iPadアプリケーションを再起動/再開するにはどうすればよいですか
重複の可能性:
iPhoneアプリをプログラムで強制的に再起動する
プログラムでiPhone/iPadアプリケーションを再起動/再開するにはどうすればよいですか
ノート:
これは反対票を投じられましたが、新しい iOS 開発者が尋ねるのは完全に有効な質問だと思います。iOS アプリを技術的に再起動または終了するのではなく、ユーザーの観点からアプリを「再起動」する方法があります。他の回答で指摘されているように、これは iOS では許可されていないため、iOS アプリは明示的に終了しないでください。
私の答え:
アプリを起動時の状態に戻したい場合、これは 100% 可能ではありませんが、すべての有効な目的に十分な方法でそこに到達する方法を説明します。
最初に行うことは、ルート ビュー コントローラーを再作成することです。次のように、アプリのデリゲートのメソッドからこれを行うことをお勧めします。
- (void)resetAppToFirstController
{
self.window.rootViewController = [[MyMainViewController alloc] initWithNibName:nil bundle:nil];
}
多くの場合、これで十分ですが、アプリの状態もこのメソッドでリセットする必要があります。たとえば、ユーザーをログアウトし、非永続状態をリセットし、可能なすべてのオブジェクトを無効化 (解放) します。このメソッドは、最初に から最初の View Controller を作成する場合にも使用できますapplication:didFinishLaunchingWithOptions
。
フレームワーク クラスとシングルトン:
次のようなフレームワーク シングルトンまたはアプリごとのインスタンスの状態を完全にリセットすることはできません。
[UIApplication sharedApplication];
[NSNotificationCenter defaultCenter];
[NSUserDefaults standardUserDefaults];
[UIScreen screens];
// etc...
とにかくこれらに非永続的な状態を保存するべきではないので、おそらく問題ありません(ただしNSNotificationCenter
、オブジェクトが解放されたときに登録されているすべてのオブザーバーは削除されているはずです)。フレームワークの状態を初期化またはリセットしたい場合は、同じresetAppToFirstController
メソッドで実行できます。window
とにかく、これらまたはオブジェクトを再作成する必要はありません。
独自のシングルトンがある場合は、それらをシングルトン ホルダー クラス (それ自体が実際のシングルトン) に格納することで再作成できます。概念的には、これは他の各シングルトンのプロパティを持つ単純なシングルトン クラスであり、reset
それらをすべて無効化して解放する方法。他のシングルトンは、(静的またはグローバル変数の代わりに) このクラスを使用して、シングルトン インスタンスを格納する必要があります。サードパーティのライブラリもシングルトンを使用している可能性があるため、使用する場合は注意してください。必要に応じてリセットできるように、これらもシングルトン ホルダーを使用するようにする必要があります。とにかく、この手法は良い習慣だと思います。場合によっては(ユニットテストなど)、通常はシングルトンであるオブジェクトを削除して元の状態に再初期化する必要があるためです。ただし、シングルトン実装をシングルトン ホルダーと結合したくないので、これを実装する良い方法は、 をNSMutableDictionary
関連オブジェクトとして使用することです。[UIApplication sharedApplication]
シングルトン クラス名をキーとして使用します。ただし、これはこの質問の範囲を超えたより高度な手法であるため、少し話題から外れます。
上記は、ユーザーに関する限り、アプリケーションを「リセット」するのに十分なはずです。必要に応じて、最初のビュー コントローラーとしてスプラッシュ スクリーンを再度表示することもできます。
いいえ、iOSアプリケーションをプログラムで再起動する方法はありません。アプリケーションのライフサイクルはOSによって制御されます。