0

iPad アプリをデバッグしているときに、メモリが不足しているため、いくつかのビュー コントローラーviewDidUnloadが呼び出されていることがわかりました。しかし、数秒後、それらviewDidLoadが呼び出されます。そして、メモリ不足のため、viewDidUnload、そしてviewDidLoadまた。これは、メモリ不足のためにファイル システムがファイルをスワップし続けるようなものです。

このようなことになっているのでしょうか、それとも何か間違ったことをしましたか?

次に、これを取り除くためにView Controllerを解放したいと思います。ただし、 のviewDidUnload前に呼び出さdeallocれ、割り当てが解除されたビュー コントローラーに送信されたセレクターが原因でクラッシュすることがあります。

助けてくれてありがとう。

4

1 に答える 1

0

これは完全に正常な動作です。viewDidUnloadビューが解放されたことをコントローラに通知するために、メモリ不足の状況で呼び出されます。

View Controller Programming Guide for iOSには、手順の明確な概要があります。

特に、ビューのロードとアンロードの方法についてのセクションで説明されている手順を参照してください。ここでは、アンロード サイクルについて説明しています。

  1. アプリは、システムからメモリ不足の警告を受け取ります。

  2. 各View Controllerは、そのdidReceiveMemoryWarningメソッドを呼び出します。このメソッドをオーバーライドする場合は、それを使用して、View Controller オブジェクトが不要になったメモリまたはオブジェクトを解放する必要があります。ビューコントローラーのビューを解放するために使用しないでください。デフォルトの実装が確実に実行されるようにするには、実装のある時点で super を呼び出す必要があります。デフォルトの実装では、ビューを解放しようとします。

  3. ビューを安全に解放できない場合 (たとえば、画面に表示されている場合)、既定の実装が返されます。

  4. ビュー コントローラーはその viewWillUnload メソッドを呼び出して、ビューが削除されようとしていることをサブクラスに通知します。サブクラスは通常、ビューが破棄される前にビュー プロパティを保存する必要がある場合に、viewWillUnload メソッドをオーバーライドします。

等々。

あなたの特定のケースでは、この場合、View Controllerを解放したくないことは間違いありません。メモリが少ないときにさらにメモリ管理を行う必要がある場合は、didReceiveMemoryWarningのデフォルトの実装をオーバーライドする必要があります。ドキュメントの状態として、 を呼び出すことを忘れないでください[super didReceiveMemoryWarning];

于 2012-04-25T17:32:46.673 に答える