2011-01-28 8 views
2

私はしばしば何かについて質問します。新しいviewcontrollerを作成する前に、私は何らかの方法で提示したいviewcontrollerの名前を持つインスタンス変数をチェックします。alloccontent/init(iOS)ではない場合に、viewcontrollerが存在するかどうかを調べる

if (self.viewcontroller == nil) { 
    //alloc and init the viewcontroller, then set the reference to this. 
} 

//Else I use the instance variable reference without making a new object of it. 

これは、単一のwebviewを持つビューコントローラなどのオブジェクトで行います。 webviewが開く可能性のあるURLは異なりますが、これはviewWillAppearメソッドで設定されます。

この悪い習慣ですか?私はまた、 "詳細な" viewcontrollerを保持します。

ありがとうございます。

答えて

2

このようなケースでは、私は通常、このようgetterメソッドを書くには:

- (UIViewController*) viewController 
    { 
if (!viewController) 
     { 
     viewController = [[UIViewController alloc] init]; 
    // ... any other setup that needs doing at this point. 
     } 
    return viewController; 
    } 

これは私ではなく、チェック、アロケーション、初期化よりも、私のコード全体[自己のViewController]を使用できるように、私のコード全体を保持。

これはあなたが求めていたものですか?

+1

怠惰な初期化を使用するとよいでしょうが、 '-retain'の呼び出しは不要で、View Controllerインスタンスがリークします。それをしないでください。 – jlehr

+0

はい、私は保持について不明です。私が "親" viewcontrollerでdeallocで解放するプロパティに持っていると、なぜそれがリークしますか? – LuckyLuke

+0

@jlehr、エラーの検出に感謝します。私はそれを修正した。 allocは、新規およびコピーとともに、所有権を付与します。 – westsider

関連する問題