サーチ…


備考

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という名前のゲッターメソッドが呼び出されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow