2009-06-03 17 views
0

FooControllerのサブクラスUIViewControllerにはFooのリストが表示されているとします。 fooプロパティのライフサイクルを処理するためのベストプラクティスは何ですか?UIViewControllerサブクラスの初期化

@propertyを読み取り/書き込みと定義していますか?実際にはそうではありません。一度設定されると、それを変更すると状態が一貫しなくなる可能性があります。 @propertyreadonlyとして作成し、という新しい指定初期化プログラムを作成してinitWithNibName:bundle:としますか?コントローラがスタックからポップされるたびに新しいインスタンスを作成し、新しいfooでプッシュしなければなりません。

後者は私に取るアプローチが好きですが、誰もこれをやったことはありませんでした。だから、何が標準的な練習ですか?

答えて

3

プロパティは一般的に行く方法です。彼らはあなたにKVC/KVOの力を与えます

あなたはFooプロパティ(KVO)のオブザーバーとしてクラスを設定する必要があります。その後、Fooが変更されるたびに、それに対処するチャンスが与えられます。不一致を心配する必要はありません。

 [self addObserver:self forKeyPath:@"foo" options:0 context:@"fooChanged"]; 

そして、変化を観察:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 

    if([keyPath isEqualToString:@"foo"]){ 

     //do your thing 


    } 
} 

今fooが、後に初期化子またはいくつかの時間に設定されている場合、あなたはそれに対処することができ、それを問題ではありません。あらかじめ決められた順序でクラスを操作してオブジェクトを強制的に動作させることで、コードブレークを起こさせたくありません。それは非常に柔軟性がなく、一般に悪い習慣です。このようにして、これらの変更を優雅に処理することができます。

0

Objective-Cは動的言語です。だから、カプセル化に厳しくしないでください。この象牙は、とにかくKVCと考えられていました。 だから@property(readwrite)はOKです。

関連する問題