0

ナビゲーションベースのアプリがあります。画面リストにはUITableView本のリストが表示されます。書籍のリストはNSArray、HTTP リクエストを実行することによって動的に構築されたプロパティにあります。Listの行の 1 つをクリックすると、画面のDetailsに移動します。この時点でメモリ警告があるとしましょう。画面Listに戻ると、が呼び出されたNSArrayため nilであるため、 Listは空になります。viewDidUnload

この状況を処理する正しい方法は何ですか? NSArrayを nil に設定すべきではありませんviewDidUnloadか?

4

4 に答える 4

1

通常、IBOutlet UI 要素のプロパティのみを無効にします。で再作成できるものはすべて、安全にクリーンアップすることもできます-viewDidLoad。ただし、一般的に言えば、このメソッドは、ビュー コントローラーではなく、ビューに関連するメモリをクリーンアップして解放するためだけのものです。

于 2011-07-31T17:58:54.607 に答える
0

配列が viewDidLoad セクションに組み込まれている場合は、nil に設定できます。ビューが呼び出されると、再構築されます。

一般に、viewDidLoad セクションまたは xib ファイルで再構築できるものは、viewDidUnload で nil に設定する必要があります。

このように遅延して初期化することをお勧めします-

- (NSArray *)bookArray {
    if (bookArray == nil) {
        bookArray = [[NSArray alloc] init];
    }
    return bookArray;
}

次にviewDidLoadで:

self.bookArray = [NSArray arrayWithOjects:...,nil];
于 2011-07-31T18:15:58.727 に答える
0

通常、オブジェクトの NS(Mutable)Array を void dealloc() に設定します。Nil および解放 (オブジェクトが自動解放されていない場合)。

uinavigationcontroller を使用すると、ビューがプッシュされるため、詳細ビューから戻ったときに、通常は以前のデータが表示されますが、ビューに入れない限り、更新が表示されます。

私の推測では、http リクエストからメモリを解放する際に問題があると思われます。

于 2011-07-31T18:05:35.193 に答える
0

正しい方法は、データを UIViewController に保存するのではなく、データを管理する別のオブジェクトに保存することです。

ビューコントローラーは、モデルと画面の間のリンクとして機能します。データの保存には使用しないでください。

于 2011-07-31T17:59:13.977 に答える