0

私のアプリには、アプリ全体の1か所でのみ使用するUIViewControllerサブクラス(略してVC)があります。その場所で、私はそれを次のように作成してプッシュしています:

MyViewController* VC = [MyViewController new];
[self.navigationController pushViewController:VC animated:YES];
[VC release];

しかし、このタイプのView Controllerを使用しているのはここだけなので、View Controllerがスタックにプッシュされるたびに使用される設定がリセットされないように、次のようなことができると考えていました。

static MapsToSendPicker* VC = nil; 
if(!VC) {
    VC = [MapsToSendPicker new];
}

[self.navigationController pushViewController:VC animated:YES];
[VC release];

そのコードの問題は、VCのdeallocメソッドで、すべてのインスタンス変数を解放してnilに設定し、最後にを呼び出すこと[super dealloc]です。これにより、静的ビューコントローラーの割り当てが解除されますが、テストif(!VC)は後でtrueと評価されません(これにより、アイデア全体の目的が無効になります。とにかく、毎回View Controllerを再作成する必要があります)。

私の解決策はdealloc、MyViewControllerのメソッドをオーバーライドし、最後に呼び出さない[super dealloc]ことです。これは機能しますが、コンパイラは警告を出します。このデザインで得た機能を維持しながら、どうすればその警告を取り除くことができますか?ありがとう!

編集:

グーグルで簡単に検索したところ、次の解決策が見つかりました。

- (void)dealloc {
    if(NO) {
        [super dealloc];
    }
}

でも少し…もっときれいなものが欲しいです。何かご意見は?

4

1 に答える 1

3

行を削除し、[VC release];[superdealloc]を追加し直します。すべてが適切に機能し、deallocが呼び出されることはありません。通常NSUserDefaults、コントローラーを常にメモリに保持するのではなく、VCプロパティを復元するために使用することを検討する必要があります。

于 2012-05-02T16:39:55.020 に答える