iOS
キー値コーディング - キー値の観測
サーチ…
備考
KVC : - Key-Value Coding
通常、インスタンス変数はプロパティまたはアクセサを使用してアクセスされますが、KVCは文字列形式で変数にアクセスする別の方法を提供します。このように、クラスは辞書のように機能し、プロパティ名は "age"となり、プロパティの保持値はそのキーの値になります。
For example, you have employee class with "age" property. Normally we access like this.
emp.age = @”20″;
NSString age = emp.age;
But KVC works like this:
[emp valueForKey:@"age"];
[emp setValue:@"25" forKey:@"age"];
KVO : - Key-Value Observer
プロパティの変更があったときにオブジェクトに通知されるメカニズムは、KVOと呼ばれます。例:キーボード通知
例えば、personオブジェクトはBankAccountオブジェクトでaccountBalanceプロパティが変更されたときに通知を受け取ることに関心があります。これを実現するには、Personオブジェクトは、addObserver:forKeyPath:options:context:メッセージを送信して、BankAccountのaccountBalanceプロパティのオブザーバーとして登録する必要があります。
KVO観測のためのコンテキストの使用
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
コンテキストは、他の人が使用するためにクラスを出荷する場合に重要です.Contextは、クラスオブザーバが自分のオブザーバが呼び出されていることを確認させます。
オブザーバーを通過しない問題は、あるクラスがクラスをサブクラス化し、同じオブジェクトに対して同じオブジェクトを登録し、コンテキストを渡さない場合、スーパークラスオブザーバを複数回呼び出すことができます。
あなたの使用のためにユニークで内部的な変数は良い文脈です。
詳細については。
NSObjectサブクラスのプロパティを観察する
ほとんどのKVOおよびKVC機能は、すべてのNSObject
サブクラスで既定で既に実装されています。
personObject
という名前のオブジェクトのfirstName
という名前のプロパティの監視を開始するには、監視クラスでこれを行います。
[personObject addObserver:self
forKeyPath:@"firstName"
options:NSKeyValueObservingOptionNew
context:nil];
上記のコードでself
が参照するオブジェクトは、観測されたobserveValueForKeyPath:ofObject:change:context:
されるたびに、 observeValueForKeyPath:ofObject:change:context:
メッセージを受け取ります。
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context
{
NSLog(@"new value of %@ is: %@", keyPath, change[NSKeyValueChangeNewKey]);
}
「キーパス」はKVCの用語です。 NSObject
サブクラスは、デフォルトでKVC機能を実装します。
_firstName
という名前のインスタンス変数は、 @"firstName"
_firstName
でアクセスできます。
_firstName
インスタンス変数またはsetFirstName
セッターメソッドがあるかどうかにかかわらず、 @"firstName"
_firstName
にアクセスするときに、 firstName
という名前のゲッターメソッドが呼び出されます。