5

Cocoaでは、addObserver:forKeyPath:options:context:「受信者でも監視者でもない」を保持します。したがって、私は自己を観察することは許可されていると思います。つまり、次のようなことを行うことは完全に有効です

[self addObserver:self forKeyPath...]

selfあなたがdeallocの最初のものとしてオブザーバーとして登録を解除することを覚えている限り。

この仮定は正しいですか?

4

3 に答える 3

12

はい、自分を観察できない理由は実際にはありません。しかし、あなたが言ったように、他のKVO観測と同様に、割り当てを解除する前に、必ずオブザーバーとしての自分を削除してください。

ちなみに、単純なキーについて話しているだけの場合、これを行う別の方法の1つは、カスタムセッターを作成し、セッターで必要なコードを実行することです。このスタイルは、セッターを呼び出すことの完全な効果が何であるかをもう少し明確にします。ただし、KVOの方法はもう少し柔軟性があり、複数のコンポーネントを含むキーパスで機能します。

于 2009-08-10T01:56:38.627 に答える
1

ブライアン・ウェブスターが言ったことをします。次に例を示します。

//.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
}
...
于 2009-08-10T08:13:45.990 に答える
-1

のオブザーバーを削除しないでください-dealloc。なんで?ガベージコレクターをオンにすると、動作が停止するためです。-dealloc呼び出されることはありません。メモリ関連のクリーンアップコードには、 -deallocand-finalizeメソッドを使用する必要があります。

于 2009-08-10T08:42:02.517 に答える