我想知道这个方法的参数会返回什么。
- (void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context;
keyPath 相对于对象的关键路径,指向已更改的值。
object 密钥路径keyPath的源对象。
change 一个描述已对其进行更改的字典 关键路径上的属性值 keyPath相对于object。
context 注册接收者时提供的值 接受键值观察 通知。
你能否为我解释这些参数,因为我发现文档有点难以理解。
答案 0 :(得分:13)
当您注册KVO通知时,您指定了addObserver:
的密钥路径。 keypath参数只是返回给您的值。 object参数是您向其发送addObserver:
消息的对象。这些可用于区分不同键路径/对象的KVO通知(例如,如果您正在观察多个值)。
change
是一个字典,其中包含有关值更改性质的信息。它可能包含新值或旧值,或者对于多对多关系,它可能包含已更改的索引。其内容在接收通知变更部分的KVO Programming Guide中有更好的描述。
注册通知时,您还可以指定上下文值。最后一个值就是返回给您的这个值。如果您没有任何特定于上下文的信息,则将nil传递给addObserver:
是合适的。
有关KVO系统的一些缺点(以及一些帮助他们解决这些问题的帮助类)的讨论,请参阅Mike Ash's great blog post