Cocoaでは、addObserver:forKeyPath:options:context:
「受信者でも監視者でもない」を保持します。したがって、私は自己を観察することは許可されていると思います。つまり、次のようなことを行うことは完全に有効です
[self addObserver:self forKeyPath...]
self
あなたがdeallocの最初のものとしてオブザーバーとして登録を解除することを覚えている限り。
この仮定は正しいですか?
Cocoaでは、addObserver:forKeyPath:options:context:
「受信者でも監視者でもない」を保持します。したがって、私は自己を観察することは許可されていると思います。つまり、次のようなことを行うことは完全に有効です
[self addObserver:self forKeyPath...]
self
あなたがdeallocの最初のものとしてオブザーバーとして登録を解除することを覚えている限り。
この仮定は正しいですか?
はい、自分を観察できない理由は実際にはありません。しかし、あなたが言ったように、他のKVO観測と同様に、割り当てを解除する前に、必ずオブザーバーとしての自分を削除してください。
ちなみに、単純なキーについて話しているだけの場合、これを行う別の方法の1つは、カスタムセッターを作成し、セッターで必要なコードを実行することです。このスタイルは、セッターを呼び出すことの完全な効果が何であるかをもう少し明確にします。ただし、KVOの方法はもう少し柔軟性があり、複数のコンポーネントを含むキーパスで機能します。
ブライアン・ウェブスターが言ったことをします。次に例を示します。
//.h
...
@property(readwrite, retain, setter=setMyPropertySynth:) id myProperty;
-(void)setMyProperty:(id)newValue;
....
//.m
...
@synthesize myProperty;
-(void)setMyProperty:(id)newValue
{
//add code here
[self setMyPropertySynth:newValue];
//add more code here
}
...
のオブザーバーを削除しないでください-dealloc
。なんで?ガベージコレクターをオンにすると、動作が停止するためです。-dealloc
呼び出されることはありません。メモリ関連のクリーンアップコードには、 -dealloc
and-finalize
メソッドを使用する必要があります。