この質問に対するFoundationMagicについての回答を得ました: Key-Value-observingに準拠するプレーンデータオブジェクトを実装するための最も*簡単な*方法は何ですか?
魔法は何ですか?内部でどのように機能しますか?内部の振る舞いがわからないフレームワークを使うのは危険なので、その振る舞いを知りたいです。現在、メソッド定義なしではどのように機能するのか理解できません。
この質問に対するFoundationMagicについての回答を得ました: Key-Value-observingに準拠するプレーンデータオブジェクトを実装するための最も*簡単な*方法は何ですか?
魔法は何ですか?内部でどのように機能しますか?内部の振る舞いがわからないフレームワークを使うのは危険なので、その振る舞いを知りたいです。現在、メソッド定義なしではどのように機能するのか理解できません。
Appleのドキュメントには、KVOが内部でどのように実装されているかが記載されています。
その要点は、オブジェクトにオブザーバーを登録すると、フレームワークがオブジェクトの元のクラスのサブクラスを動的に作成し、この新しい動的クラスのインスタンスとして表示されるようにオブジェクトを調整することです。オブザーバーを登録した後でデバッガーでオブジェクトを検査すると、これを確認できます。
この新しいクラスは、オブジェクトへのメッセージをインターセプトし、特定のパターン(ゲッター、セッター、コレクションアクセスなど)に一致するメッセージを検査します。
簡単に言うと、Objective-C 2.0の@property宣言は、名前付きプロパティのアクセサーメソッドを作成するため、メソッド定義があります。@propertyは、それらを定義するための簡単な方法であり、反復的なボイラープレートコードの多くを回避します。
プロパティを監視すると、プロパティ値を変更する前後に適切な通知メソッドを呼び出すアクセサーを実装するプライベートサブクラスが作成されます。次に、「isa swizzling」と呼ばれる手法を使用して、観測対象のクラスを変更します。