3

私のアプリには、スタック内 (UINavigationController の下) にいくつかの UIViewControllers があります。特定のケースでは、内部 UIViewControllers にいるときにメモリ警告が表示されます (ほとんどの場合、バックグラウンドで実行されている他のアプリケーションでデバイスが過負荷になっている場合に発生します)。これらのメモリ警告が発生すると、アプリケーションは実行を継続し (ほとんどの場合)、アプリケーションに戻るrootViewControllerとリロードしますが、ビュー オブジェクト (ほとんどは UIButton 画像) を埋めません。

と を実装didReceiveMemoryWarningしたいapplicationDidReceiveMemoryWarningのですが、その方法がわかりません。

私が探している最終結果は、アプリケーションがメモリ警告の後にこの「リロード」を行うとrootViewController、ユーザーが内部の UIViewControllers に「飛び込む」前と同じ状態で「リロード」することです。

  • 実装はどうすればいいですか?
  • didReceiveMemoryWarning各 UIViewControllerにデフォルトを実装する必要がありますか?
  • rootViewControllerメモリ警告は常に内部 UIViewControllers で発生するため、実行する必要があることをどのように通知すればよいdidReceiveMemoryWarningですか?
  • どの設定を行うべきかを に伝えるにはどうすれrootViewControllerばよいですか? 言い換えれば、設定をdidReceiveMemoryWarning削除しない場所に保存し、 didReceiveMemoryWarning「リコール」を有効にして、ユーザーが「レベルナビゲーション」を開始したのと同じ画面が表示されるようにすることはできますか?
4

1 に答える 1

3

UINavigationControllerスタック上の非表示のViewControllerは、そのビューをダンプします。警告も送信されます。ビューコントローラによって保持されている大きなデータ構造がある場合は、可能であればそれらをダンプする必要があります。

ルート(他の)コントローラーは、適切に処理し、別の/フェーズviewDidUnloadを循環できる必要があります。loadViewviewDidLoad

状態を同じにしたい場合は、そのすべての情報を永続化する必要があります。NSUserDefaultsは、これを行うための標準的な場所です。

于 2011-07-16T17:13:38.953 に答える