4

メモリ不足の警告が表示されると、すべてのビューを解放し、アウトレットを nil に設定して、もう一度作成し直します。ただし、インターフェイス ビルダーで追加されたビューの場合、それらは initWithNibName が呼び出されたときにのみ追加されます。

それで、インターフェースビルダーを介して多くのビューを使用するのは一般的に悪い習慣ですか、それとも元のUIViewController実装によって自動的に処理されdidReceiveMemoryWarning(iOS 6+) or viewDidUnload (iOS 5 and below)ますか?

4

1 に答える 1

1

のデフォルトの動作はviewcontroller、ビュー プロパティが最初にアクセスされたときにそのビュー階層をロードし、その後ビュー コントローラーが破棄されるまでメモリ内に保持することです。コードを使用して作成されたビューが、Interface Builder で作成されたビューと異なるという兆候はありません。個人的には、UI コードが非常に速く複雑になり、UI 要素を UI 要素の機能面に分離することで、新しいプログラマーがコード ベースを簡単に維持できるようにするため、アプリのメンテナンスのために InterfaceBuilder を好みます。

ただしdidReceiveMemoryWarning、アプリに追加のメモリが必要な場合は、メモリ デリゲートを使用してビュー階層を明示的に解放します。

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

    // Add code to clean up any of your own resources that are no longer necessary.
    if ([self.view window] == nil)
    {
        // Add code to preserve data stored in the views that might be
        // needed later.

        // Add code to clean up other strong references to the view in
        // the view hierarchy.
        self.view = nil;
    }
    return;
}

ここで、View Controller のビューが画面上にないかどうかをテストしていることに注意してください。ビューがウィンドウに関連付けられている場合は、ビューとそのサブビューへのビュー コントローラーの強い参照をクリーンアップします。ビューに再作成が必要なデータが格納されている場合、このメソッドの実装では、それらのビューへの参照を解放する前にそのデータを保存する必要があります。保存することで、以前のviewcontrollerのメモリの一部としてメモリに保持するか、coredateまたはその他の永続的な(ディスクキャッシュなど)方法で保存できます。

次にビュー プロパティにアクセスすると、最初とまったく同じようにビューが再読み込みされます。絵的には完全に理にかなっています -

ここに画像の説明を入力

[ソース]

于 2013-07-11T09:34:10.727 に答える