美文网首页
自定义KVO

自定义KVO

作者: sunxu_cocoa | 来源:发表于2018-06-28 13:22 被阅读0次

KVO key-value observing简单的说就是一个对象观察另一个对象的属性变化。功能很强单,但搞起来比较麻烦,要写很多代码。所以我决定自定义一套kvo机制,使用block进行回调,这样做代码更加紧凑,也符合现在发展的潮流。

首先介绍一些kvo的原理。

1.当添加观察者的时候系统会创建被观察对象所在类的子类, 名字叫NSKVONotifying_xxxxx(xxxx是父类的名字)。

2.向这个子类添加set方法

3.将消息转发给父类

接下来我们按照系统的流程自己走一遍。

1.首先创建一个NSObject的分类(NSObject+CustomKVO),因为NSObject是基类。

2.自定义一个添加观察者的方法

- (void)kc_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath withHandle:(void(^)(id observer,id keyPath,id oldValue,id newValue))handle;

这里面一共做了四个操作

1.过滤实例变量,因为它没有set方法

2.创建子类

3.给子类绑定了set方法

4.KC_Info *info = [[KC_Info alloc] initWithObserver:observer keyPath:keyPath handle:handle];将数据分装成一个对象保存到数组中。

这个方法就是创建子类的具体实现

重写set方法,为什么这样写,因为oc的底层是通过c实现的,oc的代码都会转成c函数,所以我们自己实现set方法的c函数。

相关文章

  • iOS runtime自定义实现KVO

    1、了解KVO 打印结果: 2、自定义实现KVO .h .m

  • KVO基本使用

    分三部分解释KVO一.KVO基本使用二.KVO原理解析三.自定义实现KVO 一、KVO基本使用 使用KVO,能够非...

  • KVC/ KVO

    1、kvc原理: 45页 2、自定义KVO KVO参考链接 KVO默认观察setter,使用isa-swizzli...

  • iOS-底层原理-自定义KVO

    1.自定义KVO 1.上一篇博客了解了iOS 系统KVO的底层实现原理,那么这里进行自定义KVO,更好的理解原理和...

  • iOS 自定义KVO

    利用Runtime 实现简单的自定义kvo 代码githubgithub.com/zswj/custom-KVO ...

  • 自定义KVO,自动释放,监听多个属性

    自定义的 KVO,支持多属性监听,支持自动释放。 使用系统 KVO 监听属性 先来回顾下系统 KVO 是如何使用的...

  • 21.iOS底层学习之KVO自定义

    本篇文章提纲:1、自定义KVO2、函数式KVO3、KVO的自动销毁机制4、FBKVOController5、GNU...

  • KVO 本质 & 自定义实现

    KVO 本质 & 自定义实现 KVO 是什么? Key-Value Observer 即键值观察者。作用为监听某个...

  • Key-Value Observing(kvo)二:自定义kvo

    一、自定义kvo 在上篇文章 kvo原理分析[https://www.jianshu.com/u/a569f590...

  • iOS - 自定义KVO

    之前我们已经了解过了KVO的底层实现原理,不过呢,在我们开始实现自定义KVO之前再来简单回顾下KVO的实现原理 1...

网友评论

      本文标题:自定义KVO

      本文链接:https://www.haomeiwen.com/subject/ivmyfftx.html