4

KVO と KVC について学ぶにつれて、私は興味を持ちました -

セッターメソッドにアクセスするとき、NSObject はどのように自動 KVO を提供しますか?

setName という名前のアクセサを持つ新しいオブジェクトを作成すると、

誰かが電話をかけたときに、オブザーバーはどのように通知を受けるのですか

[obj setName:@"Mystery"];

フィードバックをお寄せいただきありがとうございます

4

1 に答える 1

11

私はいつも、「Cocoa には魔法などありません。ただのコードです」と説明しています。しかし、KVOは魔法に接しています。これは isa-swizzling と呼ばれます。あなたのクラスは、実行時 (誰かがあなたを初めて観察したとき) に、すべてのゲッターとセッターをオーバーロードする動的に生成されたサブクラスに変換されます。への呼び出しは嘘をついて古いクラスを返すように配線されているため、ポインター-classを直接見た場合、デバッガー以外では魔法のサブクラスは表示されません。isa

KVO が奇妙に違いないことに気付くことは、Cocoa の啓蒙における大きな一歩です。おめでとう。

Key-Value 観測の実装の詳細

于 2009-08-20T15:53:38.433 に答える