iOS 关于KVO, 以及对数组的监听

1. KVO (Key-Value Observing) 是Cocoa提供的一种基于KVC的机制,允许一个对象去监听另一个对象的某个属性,当该属性改变时系统会去通知监听的对象(不是被监听的对象)。

//1>.添加观察者

//第一个self 代表被观察对象

//第二个self 代表观察者

//KeyPath: 实例变量路径

//options 可选项, 可以添加多个, 重甲用 | 分开

//context 上下文, 可以用来传值

2>. 接受KVO的事件  - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context;

3>. 移除观察者 [self removeObserver:self forKeyPath:@"name"];

此外对数组的观察要注意一点, 当你给数组发送addObject:消息时,是不会触发KVO通知的,但是通过mutableArrayValueForKey:这个方法对集合对象进行的相关操作(增加,删除,替换元素)就会触发KVO通知,这个方法会返回一个中间代理对象,这个中间代理对象的类会指向一个中间类,你在这个代理对象上进行的操作最终应在原始对象上造成同样的效果

cocoachina 看到一篇关于KVO 写得非常详细 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文结构如下: Why? (为什么要用KVO) What? (KVO是什么) How? ( KVO怎么用) Mo...
    等开会阅读 1,661评论 1 21
  • 本文由我们团队的 纠结伦 童鞋撰写。 文章结构如下: Why? (为什么要用KVO) What? (KVO是什么...
    知识小集阅读 7,424评论 7 105
  • 最近项目中处理kvo 的时候,遇到一个问题:当我操作的时候,会发现kvo 释放的时候,会崩溃, 崩溃日志如下: /...
    那是一阵清风_徐来阅读 5,471评论 0 11
  • 写在前面 程序设计语言中有各种各样的设计模式(pattern)和与此对应的反设计模式(anti-pattern),...
    Frankxp阅读 4,953评论 0 23
  • 上半年有段时间做了一个项目,项目中聊天界面用到了音频播放,涉及到进度条,当时做android时候处理的不太好,由于...
    DaZenD阅读 3,038评论 0 26