美文网首页收藏ios
关于KVO底层Runtime实现的那点事

关于KVO底层Runtime实现的那点事

作者: 哈哈哈哈coke丶 | 来源:发表于2017-09-25 00:39 被阅读13次

有很多公司iOS面试都会被问到KVO底层的实现。网上也有很多篇关于KVO的底层原理,但是都是用willChangeValueForKey 和 didChangeValueForKey 来实现的KVO。最近从网上公开课学到用runtime底层机制自己实现了一个KVO,接下来就进入正题。 

1、注册一个类,属于当前的的子类

NSString * selfClassStr =NSStringFromClass([selfclass]);

NSString * subClassStr = [@"KVO_" stringByAppendingString:selfClassStr];

Classsub Class =objc_allocateClassPair([selfclass], subClassStr.UTF8String,0);

objc_registerClassPair(subClass);//特别注意生成类之后需要注册。

2、把当前类的指向子类

object_setClass(self, subClass);

3、给子类添加set方法

NSString* capitalizedKeyPath = [keyPathcapitalizedString];

NSString* methodNameStr = [NSString stringWithFormat:@"set%@:",capitalizedKeyPath];

class_addMethod(subClass,NSSelectorFromString(methodNameStr), (IMP)observerBlock,"");

4、储存observer对象

objc_setAssociatedObject(self,@"key", observer,OBJC_ASSOCIATION_ASSIGN);

5、实现添加方法里面的observerBlock方法

Class class = [self class];

object_setClass(self, [self superclass]);

id observer =objc_getAssociatedObject(self,@"observer");

objc_msgSend(self,@selector(setName:),name);

objc_msgSend(observer,@selector(observeValueForKeyPath:ofObject:change:context:),@"name",self,@{@"newValue":name},nil);

object_setClass(self, class);

附二张图

添加KVO截图 实现KVO截图

差不多到这里runtime实现KVO已经初步完成。里面有很多API没有细讲,只是把KVOdidChangeValueForKey实现。有兴趣的小伙伴可以交流交流。

第一次在网络上发干货,哈哈。不喜勿喷。 以后也会常发,为了巩固自己的技术,也和大家多分享一些干货,以后面试不再怕啦!!!

最后GitHub 地址: KVO

相关文章

  • 关于KVO底层Runtime实现的那点事

    有很多公司iOS面试都会被问到KVO底层的实现。网上也有很多篇关于KVO的底层原理,但是都是用willChange...

  • iOS --- KVO

    KVO 的底层实现原理 (1)KVO 是基于 runtime 机制实现的 (2)假如有个对象DoLin(类型为Do...

  • KVO原理分析

    一、KVO底层实现原理 示例代码: KVO 的实现过程实际上是利用了 OC 的 runtime 机制,当一个实例对...

  • 面试题(2)

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

  • KVO的底层是怎么实现的?

    KVO的底层是怎么实现的? 1:KVO是基于Runtime机制实现的2:当某个类的对象第一次被观察时,系统就会在运...

  • 自定义KVO(探索KVO底层本质)

    KVO底层实现原理 KVO是基于runtime机制实现的 当某个类的属性对象第一次被观察时,系统就会在运行期动态地...

  • ios-Runtime(运行时)

    利用runtime来实现归档解档 方法交换 俗称 OC的方法欺骗 KVO的实现原理 用runtime来实现KVO...

  • 可能碰到的iOS笔试面试题(7)--KVO-KVC

    KVC-KVO KVC的底层实现? KVO的底层实现? 什么是KVO和KVC? KVO的缺陷? KVO是一个对象能...

  • 2022-09-20

    Runloop runtime kvo kvo多线程sdwebimage afnetwork底层原理内存管理定时器...

  • 进阶题一

    1.KVC的底层实现? 2.KVO的底层实现? 3.说一下工作中你怎么做性能优化的 5.Runtime实现的机制是...

网友评论

    本文标题:关于KVO底层Runtime实现的那点事

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