美文网首页
iOS -- KVO 基于runtime的剖析

iOS -- KVO 基于runtime的剖析

作者: 移动布道师 | 来源:发表于2017-04-18 17:31 被阅读0次

最近一直有小伙伴问我kvo基于运行时的一些底层原理,觉得有必要写点东西记录一下。所谓KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则其观察者就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。KVO其实也是“观察者”设计模式的一种应用。这种模式有利于两个类间的解耦合,尤其是对于 业务逻辑与视图控制 这两个功能的解耦合。KVO 的具体实现具体实现代码如下:

当改变被观察对象person的值时,观察者Viewcontroller会调用相应观察者方法

KVO 的实现原理

KVO 是基于运行时实现的

isa Class NSKVONotifying_Person 

上述例子中,如上图,当 p1.name 的值改变时,p1对象的 isa 指针会指向 NSKVONotifying_Person(这里我喜欢称之为中间类),意味着,在程序运行时,会动态生成一个 NSKVONotifying_Person 类,该类继承于 Person,而且该类中也有个 -setName: 方法,方法中在设置 name 的同时实现了:

- (void)setName:(NSString *)name

{

[super setName:name];

// 这两个方法底层会调用observer的- (void)observeValueForKeyPath: ofObject: change: context:这个方法

[self willChangeValueForKey:@"age"];

[self didChangeValueForKey:@"age"];

}

至此kvo基于运行时的实现已经不再神秘。。。更加详细的剖析,会在大伙有需求的时候再来做总结

相关文章

  • iOS -- KVO 基于runtime的剖析

    最近一直有小伙伴问我kvo基于运行时的一些底层原理,觉得有必要写点东西记录一下。所谓KVO,即:Key-Value...

  • KVO应用、原理及自实现

    一.KVO简介 KVO 是ios里,观察者设计模式的一种应用实现,依赖runtime,基于KVC,KVO提供了一种...

  • iOS面试题03-Foundation(★★★)

    《2018 iOS面试题系列》 一、KVO内部实现原理 KVO是基于runtime机制实现的 当某个类的对象第一次...

  • iOS Runtime学习笔记 (二) - 实战应用

    iOS runtime实战应用 iOS runtime 进行添加属性,并支持KVO监听 iOS 中category...

  • 透彻理解 KVO 观察者模式(附基于runtime实现代码)

    透彻理解 KVO 观察者模式(附基于runtime实现代码) 透彻理解 KVO 观察者模式(附基于runtime实...

  • 面试题(2)

    runtime/KVO等面试题 1.KVO内部实现原则 回答:1>KVO是基于runtime机制实现的 2>当某个...

  • 4.iOS开发之KVC

    iOS的日常开发中KVC与KVO还是使用率蛮高的,整理一下。KVC和KVO都是基于OC的动态特性和Runtime机...

  • 5.iOS开发之KVO

    iOS的日常开发中KVC与KVO还是使用率蛮高的,整理一下。KVC和KVO都是基于OC的动态特性和Runtime机...

  • KVO底层原理分析

    一、 KVO内部实现原理 KVO是基于 runtime机制实现的,使用了isa 混写(isa-swizzling)...

  • iOS 自定义KVO

    自己实现kvo之前,需要知道iOS系统对kvo的实现。 系统实现kvo的原理 这依赖了OC强大的runtime特性...

网友评论

      本文标题:iOS -- KVO 基于runtime的剖析

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