美文网首页
iOS开发KVO底层原理四步曲

iOS开发KVO底层原理四步曲

作者: 2thousand17 | 来源:发表于2018-12-25 10:45 被阅读0次

kvo底层是用runtime实现的,核心原理一共有四步。

1. 根据已有类获取kvo子类类名:

NSString *kvoClassName = [NSString stringWithFormat:@"CBKVO_%@",NSStringFromClass([self class])];
Method setMethod = class_getInstanceMethod([self class], NSSelectorFromString(setName(keyPath)));
NSString *setName(NSString *keyPath) {
    NSString *setName = [NSString stringWithFormat:@"set%@%@:",[[keyPath substringToIndex:1] uppercaseString],[keyPath substringFromIndex:1]];
    return setName;
}

2. 根据类名,创建子类,添加自定义的set方法:

///2.1创建类
Class kvoClass = objc_allocateClassPair([self class], kvoClassName.UTF8String, 0);
//2.2添加方法
class_addMethod(kvoClass, NSSelectorFromString(setName(keyPath)), (IMP)KVO_SetMethod, method_getTypeEncoding(setMethod));
//2.3注册新类
objc_registerClassPair(kvoClass);

3. 交换两个类的指针:

object_setClass(self, kvoClass);

4. 在自定义的set函数中调用父类的set方法,改变属性值:

void KVO_SetMethod(id self ,SEL _cmd ,id value) {
    NSLog(@"set方法执行了%@--%@",self,NSStringFromSelector(_cmd));
    struct objc_super superClass = {
        .receiver = self,
        .super_class = class_getSuperclass([self class]),
    };
    void (*cbkvo_super)(void *,SEL,id) = (void *)objc_msgSendSuper;
    cbkvo_super(&superClass,_cmd,value);
}

结语:上述四步展示的就是KVO底层实现所调用的runtime API,下篇博客将会介绍自定义KVO详细的demo实现。

相关文章

  • KVC

    KVC原理剖析 - CocoaChina_让移动开发更简单 iOS开发底层细究:KVC和KVO底层原理 | iOS...

  • iOS开发KVO底层原理四步曲

    kvo底层是用runtime实现的,核心原理一共有四步。 1. 根据已有类获取kvo子类类名: 2. 根据类名,创...

  • IOS底层(三) KVO底层实现原理

    @[TOC](IOS底层(三) KVO底层实现原理 ) 一,KVO简述 KVO的全称 Key-Value Obse...

  • iOS - KVO

    [toc] 参考 KVO KVC 【 iOS--KVO的实现原理与具体应用 】 【 IOS-详解KVO底层实现 】...

  • iOS知识点,iOS面试题, iOS面试题总结

    推荐 :iOS七年开发之路网络笔记,iOS知识点总结,iOS开发笔记。KVC /KVO的底层原理高质量 iOS 博...

  • iOS-底层原理21-KVO(下)

    iOS-底层原理21-KVO(下) 《iOS底层原理文章汇总》[https://www.jianshu.com/p...

  • 底层原理

    iOS底层原理总结 - Category的本质 KVO详解及底层实现青少年一定要读的KVO指南 iOS 底层解析w...

  • Objective-C的本质(4)—— KVO本质

    参考:iOS底层原理总结 - 探寻KVO本质iOS-KVO本质 问题一:kvo如果找到对应的属性 KVO不存在查找...

  • iOS KVO 基础与底层原理

    iOS KVO 基础与底层原理 KVO基础 KVO是通过给对象object的属性property注册observe...

  • iOS开发-底层原理 - KVO

    问题:iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)如何手动触发KVO? 一.基本使用 概念:K...

网友评论

      本文标题:iOS开发KVO底层原理四步曲

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