![ffe4849a9016614b63f27e418514ce9a.png](https://i-blog.csdnimg.cn/blog_migrate/2230e2f36c03ef3b0aac5d0e5327f0db.jpeg)
转载本文需注明出处:微信公众号EAWorld,违者必究。
引言:
无论用哪种语言进行软件开发,我们都会接触到设计模式,个人认为设计模式存在的意义在于:在某些需求下,采用适合的设计模式,使代码结构合理,从而提高代码的可读性、可扩展性、可移植性,此文将要讨论的是OC开发中的一种常用模式之一:观察者模式之KVO。
KVO俗称键值观察(key-value observe),键值观察是当被观察的对象属性发生改变时,会通知到观察对象的一种机制。
目录:
1、KVO的作用
2、KVO的使用方法
3、KVO的实现原理
4、KVO与KVC、代理、通知的区别
5、KVO实现过程中的注意事项
无论用哪种语言进行软件开发,我们都会接触到设计模式,个人认为设计模式存在的意义在于:在某些需求下,采用适合的设计模式,使代码结构合理,从而提高代码的可读性、可扩展性、可移植性,此文将要讨论的是iOS开发中的一种常用模式之一:观察者模式之KVO。我们先看下官方文档给的KVO介绍:
![db65f049eb77650740e15aa50ffd8a97.png](https://i-blog.csdnimg.cn/blog_migrate/91886b252e77fb761ea4dca910947d1c.jpeg)
翻译过来就是:KVO是运用isa混写技术实现自动观察键值的。isa指针是指向对象的类,本质上是指向类中的方法实现。当一个对象注册观察者时,这个对象的isa指针被修改指向一个中间类。永远不要用isa来判断一个类的继承关系,而是应该用class方法来判断类的实例。
KVO俗称键值观察(key-value observe),键值观察是当被观察的对象属性发生改变时,会通知到观察对象的一种机制。
1.KVO的作用
1、监听带有状态的基础控件,如开关、按钮等;
2、监听字符串的改变,当监听的字符串改变时,来做一些自定义的操作;
3、当数据模型的数据发生改变时,视图组件能动态的更新,及时显示数据模型更新后的数据,比如tableview中数据发生变化进行刷新列表操作,监听 scrollView的contentOffset属性监听页面的滑动.
2.KVO的使用方法
KVO的使用可分为自动监听和手动监听。
1.自动监听
1.1自动监听操作步骤:
(1)添加观察者
(2)在观察者中添加观察键值方法
(3)在dealloc中移除监听
1.2示例代码:
创建两个类ModelA和ModelB,两个类中都添加属性“des”,在控制器中,将B添加为A的观察者。代码如下:
ModelA中代码&#