iOS实用技巧--KVO技术的应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liyux4869/article/details/78883327

KVO机制,官方文档的解释如下:

KVO - Key-Value Observing. 它提供了一种机制,允许对象被通知到其他对象的具体特性的变化。它特别适用于一个应用的模型层与控制层的交互。

简单的说就是监控对象内的属性,当属性的值发生变化的时候就发出通知的一种机制。NSObject提供了基本的自动键-值改变通知(也就是自动模式的KVO),所以任何NSObject的子类都可以直接使用这种KVO机制。KVO机制比较常见的一种应用就是提示器(HUD),这里作者写了一个简单的提示器来说明KVO机制的实际应用。

一、创建一个UIView的子类。


这里我只创建了一个属性status来说明如何监控status的值的变化来修改提示器的呈现界面。

提示器的内容界面只用了三个控件,界面比较简单能更好的说明问题。

二、注册监控

在初始化的时候注册监控registerForKVO,在释放对象的时候注销监控unregisterFromKVO。注册监控的代码如下:

observableKeypaths()方法返回的是需要注册监控的属性的名称,这里我只注册了一个属性,需要注意的是属性的名称必须完全匹配(区分大小写)。循环将每一个属性都注册通知,当然注销的时候也是一样的。

三、属性发生变化时的处理

当NSObject监控到属性的值发生变化的时候就会调用observeValueForKeyPath这个方法,由于提示器是一个界面,我们都知道iOS的界面显示都是在主线程里面完成的,所以这里做了一个判断,如果当前线程是主线程就直接调用更新界面的方法updateUIForKeypath(),如果不是主线程,就调用performSelectorOnMainThread()方法通知主线程执行updateUIForKeypath()方法。

在updateUIForKeypath()方法里面我们对status的三种值对应的修改提示语和提示图标。结果如下:

四、更新提示器

要更新提示器的界面显示内容非常的简单,只要修改status的值就行了。

只要执行hud.status=0,hud.status=1,hud.status=2就可以直接在界面上观察到提示器界面的变化。

因为我们之前做了非主线程的判断,所以即使是在非主线程内修改status的值,界面也会立即发生变化。

提示器的使用场景往往都是在网络请求等异步执行的方法中使用的,所以这个非主线程的判断是非常必要的。

好了,自动化KVO的实用技巧就讲解到这来,希望对读者有所帮助。如果您觉得文章还不错,请小额打赏哦。


猜你喜欢

转载自blog.csdn.net/liyux4869/article/details/78883327