一句代码,更加优雅的调用KVO和通知

484 查看

写在前面

每次使用KVO和通知我就觉得是一件麻烦的事情,即便谈不上麻烦,也可说是不方便吧,对于KVO,你需要注册,然后实现监听方法,最后还要移除,通知当然也需要移除操作,这使得相关逻辑的代码过于分散,控制器搞得乱乱的,而且总有时候会忘记移除什么的,总之感觉不太好,所以我想如果能有方法添加一个KVO或者通知后能够省略后面移除或者实现监听方法步骤的话会多好,所以我就尝试写了一个分类,这个分类的目的在于尽可能简化KVO和通知的步骤,对于KVO,你只需要一句代码就可完成监听,无需自己手动移除,通知也差不多,接口如下:

使用也很简单咯,github地址如下:XWEasyKVONotification,你只需要导入NSObject+XWAdd这个分类,然后调用上面两个接口即可完成KVO和通知,事例代码如下

是不是非常简单,再也不用关心忘记移除导致的崩溃了,而且代码也集中,看着也更舒服了

原理

1、由于KVO和通知都差不多,原理部分通过KVO的接口的的实现原理进行说明,考虑到代码的统一我首先考虑到使用block,同时为了block能回调,我们需要一个内部的对象target的来实现KVO的代码,在监听到值改变的时候通过这个对象来回调block,同时一个target应该对应一个keyPath,并且可应该对应多个Block,因为我们可能对一个keyPath进行多处监听,这个类的具体代码大致如下: