1

Objective-C の KVO について少し混乱しています。プロパティが KVO に準拠している場合、通知を発行するには 1.addObserver:.../observeValueForKeyPath:...と 2.の 2 つの選択肢がありますか? それとも、特定のコンテキストでdid/willChangeValueForKey...メソッドを使用する必要がありますか?did/willChangeValueForKey

did...2 番目のもの ( ) を使用して、多数の変更を 1 つの通知にグループ化できることに気付きました。これらの 2 つの方法について、他に理解すべき重要な点はありますか? 最初の方法 ( addObserver:...) は一部のコンテキストでは使用できませんか (ただし、コンテキストは KVO に準拠しています)?

編集: NSManagedObject のサブクラスでのみ did/willChangeValueForKey...使用されましたが、使用されませんでしたaddObserver:.../observeValueForKeyPath:...: 理由を知っていますか?

4

1 に答える 1

3

これらの2つのペアは、KVOの相互作用の両側で使用されます。それらはまったく互換性がありません。

addObserver:forKeyPath:options:context:そして、観察をしたいクライアントobserveValueForKeyPath:ofObject:change:context:によって使用されます。

observeValueForKeyPath:ofObject:change:context:本質的にはコールバックです。監視対象(「プロバイダー」)オブジェクトが他のメソッドセット(さまざまな/ )を使用する場合、内部KVOメカニズムによって送信されます。通知は、実際にはその時点でメソッドによって行われます。didwill changeValueFor...change

于 2012-04-08T19:20:30.583 に答える