14

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

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

文档中它说

keyPath键路径,相对于对象,到已更改的值。

object键路径 keyPath 的源对象。

change一个字典,描述了对相对于对象的键路径 keyPath 处的属性值所做的更改。

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

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

4

1 回答 1

14

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

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

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

有关 KVO 系统的一些缺点(以及解决这些缺点的一些辅助类)的良好讨论,请参阅Mike Ash 的精彩博客文章

于 2009-10-26T16:01:54.807 回答