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

Jos*_*hua 13 parameters cocoa objective-c key-value-observing

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

- (void) observeValueForKeyPath:(NSString *)keyPath
                       ofObject:(id)object
                         change:(NSDictionary *)change
                        context:(void *)context;
Run Code Online (Sandbox Code Playgroud)

文档中

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

object key path keyPath的源对象.

change一个字典,描述对关键路径keyPath的属性值所做的更改相对于object.

context注册接收器以接收键值观察通知时提供的值.

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

nal*_*all 13

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

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

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

有关KVO系统(以及一些辅助类来解决它们)的一些缺点的讨论,请参阅Mike Ash的精彩博文

  • 请注意 KVO 链接,它已移至此处:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html (2认同)