来自observeValueForKeyPath:ofObject的参数:change:context:

时间:2009-10-26 15:49:09

标签: objective-c cocoa parameters key-value-observing

我想知道这个方法的参数会返回什么。

- (void) observeValueForKeyPath:(NSString *)keyPath
                       ofObject:(id)object
                         change:(NSDictionary *)change
                        context:(void *)context;

the documentation中说

  

keyPath 相对于对象的关键路径,指向已更改的值。

     

object 密钥路径keyPath的源对象。

     

change 一个描述已对其进行更改的字典   关键路径上的属性值   keyPath相对于object。

     

context 注册接收者时提供的值   接受键值观察   通知。

你能否为我解释这些参数,因为我发现文档有点难以理解。

1 个答案:

答案 0 :(得分:13)

当您注册KVO通知时,您指定了addObserver:的密钥路径。 keypath参数只是返回给您的值。 object参数是您向其发送addObserver:消息的对象。这些可用于区分不同键路径/对象的KVO通知(例如,如果您正在观察多个值)。

change是一个字典,其中包含有关值更改性质的信息。它可能包含新值或旧值,或者对于多对多关系,它可能包含已更改的索引。其内容在接收通知变更部分的KVO Programming Guide中有更好的描述。

注册通知时,您还可以指定上下文值。最后一个值就是返回给您的这个值。如果您没有任何特定于上下文的信息,则将nil传递给addObserver:是合适的。

有关KVO系统的一些缺点(以及一些帮助他们解决这些问题的帮助类)的讨论,请参阅Mike Ash's great blog post