2012-05-02 9 views
0

私のアプリケーションでは、アプリケーション全体の1か所でしか使用しないUIViewControllerサブクラス(VCは省略)があります。その代わりに、私が作成されていると、このようにそれをプッシュ:静的UIViewControllerサブクラス内で[super dealloc]を呼び出さない

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

が、私はこれは私がこのタイプのビューコントローラを使用しています唯一の場所であることから、私はこのような何かを行うことができると考えていましたビューコントローラは、スタックにプッシュされるたびにリセットされることはありません使用する設定:

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と評価されません(これはアイデア全体の目的を破ってしまいますが、毎回ビューコントローラを再作成する必要があります)。

私のソリューションは、最後に[super dealloc]を呼び出すdealloc MyViewController方法及びないをオーバーライドしています。これは動作しますが、コンパイラは警告を発します。どのように私はこのデザインで私が得る機能を維持しながら警告を取り除くことができますか?ありがとう!

編集:迅速なGoogle検索の後

、私はこの解決策を発見した:

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

を、私は少し...クリーナー何かをしたいと思います。何かご意見は?

+0

素早くGoogle検索したところ、**完全に間違った答えが見つかりました**。その "解決策"はせいぜいメモリリークです。 – bbum

答えて

3

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

+0

私はあなたがおそらく正しいと思います - それはNSUserDefaultsです! –

関連する問題