2

は、3つの状況が発生する可能性があります:iPhone - アプリがメモリ不足の警告メッセージを受信すると、メモリ不足の状況に対処する方法

  1. のアプリがちょうど開始されていると、ユーザーが特別な何もしていません
  2. アプリが実行されていると
  3. アプリはいくつかの実行中のコンテキスト
このメッセージが表示されたときに、あなたが空きメモリになっている

...しかし、バックグラウンドであり、現在のコンテキストがありますか?そしてどうやって ?

私がいることを理解:

  1. initWithが.....デフォルトの静的な値を設定する必要があります。
  2. viewDidLoadは、これらの非静的オブジェクトを解放しなければならない任意の非静的オブジェクト
  3. didReceiveMemoryWarningをロードする必要があり
  4. は、私が何を/

は私が推測する... viewDidUnloadに行われなければならないことができます表示されていないいくつかの値を保持し

  • どこかにnilに設定する必要があります... didReceiveMemoryWarning?

    アクティブなコンテキスト(画面の位置、表示されたテキストなど)で行う必要があるので、viewDidLoadが再び呼び出されると、それらはmemoryWarningコールの前にどこに表示されますか?

    私は意味、想像2のシナリオ:

    シナリオ1

    1. あなたは...あなたは別のビューを開いて、それを保存していなかった、フィールド内のテキストを書いた何かに取り組んでいます、画面上のビューを移動しました。
    2. アプリをバックグラウンドで送信します。
    3. 次に、メモリウォーニングがアプリに送信されます。
    4. その後、ユーザーはアプリをフォアグラウンドに送信します。これは、終了時のようなものを前のビューと同じように表示するはずですが、すべてがリリースされている場合はどうすればよいでしょうか?

    シナリオ2

    1. あなたは、別のビューを開いて、画面上のビューを移動し、それを保存していなかった、フィールド内のテキストを書いた...何かに取り組んでいます。
    2. 次に、メモリウォーニングがアプリに送信されます。
    3. ビュー上の内容や前のビューの内容を失いたくないです。あなたは、リリース/リロード機能のために画面がちらつくのを望まない。あなたはこれにどのように対処していますか?

    これらのメモリの警告が発生した場合、後で表示するためにディスクに書き込む以外の方法がありますか?

    いつそれらを再度ロードしますか?私は(viewDidLoad)をロードするviewControllerを持って、memoryWarningを受け取り、(viewDidUnload)をアンロードしますが、それに戻るとき、viewDidLoadは再び呼び出されませんか?これはviewWillAppearで行う必要がありますか?私はいつでもviewWillAppearがトリガーされると考える必要があります、私はそれに表示されるはずのものが読み込まれていると仮定することができますか?

    貴重なリンクがあっても、どんな助力も素晴らしいことでしょう。

    ありがとうございました。

    didReceiveMemoryWarning // in your NSObjects 
    

    、その後

    applicationDidReceiveMemoryWarning // in your app delegate 
    

    あなたがメモリを解放したい場合は、これらの方法には、次のとおりです。

  • 答えて

    1

    私の考えは、アプリがメモリ不足の警告を受けたときに、2つのメソッドが呼び出されるということです検討してください。

    あなたがそこに何ができるかについては...まあ... はXcodeのが示唆ものについて考える:

    一見
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { 
        /* 
        Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. 
        */ 
    } 
    
    - (void)didReceiveMemoryWarning { 
        // Releases the view if it doesn't have a superview. 
        [super didReceiveMemoryWarning]; 
    
        // Release any cached data, images, etc that aren't in use. 
    } 
    

    、最高のチョイスは/ユーザから見ていない任意のオブジェクトを解放され、使用していないか、後で再作成できるキャッシュされたデータであるかどうかを確認します。 GUIに触れないでください:GUIを閉じるかその一部を使用すると、アプリは使用できなくなり、ユーザーは失望します。

    あなたの2つのシナリオに関しては、どのようなメモリ警告があるかを考える際に間違いがあります。 これは、メモリを管理する通常の方法ではなく、緊急事態を処理する方法です。 開発者は、可能な限り良好なメモリアーキテクチャを考え、データを保存する必要があります。

    シナリオ1では、アプリケーションがバックグラウンドに送信されるときにデータを保存します。

    applicationDidEnterBackground 
    

    シナリオ2では、新しいビューを開くときにデータを保存します。

    これは意味すると思います...

    1

    シナリオの代替案を検討してください。あなたのアプリが十分なメモリを解放しない場合、あなたのアプリは殺される可能性があります。ユーザの貴重なデータを失うことにより、現在の表示がちらつくことを潜在的に選択する可能性がある。

    +0

    私の場合、ちらつきの代わりにアプリを殺すのが良いでしょう。私はユーザーデータを持っていませんが、生成された内容はありません。これらのコンテンツは、非円滑な方法で生成されるのではなく、失われた方がいいです。 – Oliver