美文网首页
KVO原理理解2018-07-18

KVO原理理解2018-07-18

作者: iOS打怪升级 | 来源:发表于2018-07-18 22:55 被阅读10次
  1. 如何自己动手实现 KVO
    cocoachina 上的一篇,有点乱

需要注意的方法:这里会才坑 :

/*
* @param  cls :当前需要修改的类
* @param name  被添加的方法的名字
* @param imp    被添加方法的实现函数指针
* @param types  表示方法参数类型列表的一个数组字符: 其中因为方法最少两个参数self 和_cmd ,所以第二个和第三个参数一定是@:    ,types里面的第一个字符表示返回值类型。

*/
class_addMethod(Class _Nullable cls, SEL _Nonnull name, IMP _Nonnull imp, 
                const char * _Nullable types) ;

types 详细规则可以参考官方文档

types 举例:
方法是 - (void)setName:(NSString *)name
IMP :static void KVO_setterMethod(id self, SEL _cmd, id newValue){}
types: v@:@

方法是 - (void)setAge:(int)age
IMP:IMP :static void KVO_setterMethod(id self, SEL _cmd,int newValue){}
types: v@:i

自己写了一遍DEMO:

  1. 关于常用的方法交叉使用
1. 字符串获取SEL  : NSSelectorFromString

   SEL setterSeL = NSSelectorFromString("methodName");


2. SEL 获取Method : class_getInstanceMethod

   Method setterMethod = class_getInstanceMethod(self.class, setterSeL);

3. Method 获取IMP : method_getImplementation

   IMP methodIMP =  method_getImplementation(setterMethod)


总结:name > SEL > Method > IMP

  1. runtime 方法报错
//报错 Too many arguments to function call ,expected 0,have3
 objc_msgSend(self, @selector(setAge:),age); 

原因:默认编译器对objc_msgSend 是严格检查的,可以手动设置是否启动严格检查

解决办法:Build Setting--> Apple LLVM 6.0 - Preprocessing--> Enable Strict Checking of objc_msgSend Calls  改为 NO

  1. 官方Runtime 编程指导

相关文章

  • KVO原理理解2018-07-18

    如何自己动手实现 KVOcocoachina 上的一篇,有点乱 需要注意的方法:这里会才坑 : types 详细规...

  • IOS KVO原理解析与应用

    IOS KVO原理解析与应用 一、KVO概述 KVO,即:Key-Value Observing,是Objecti...

  • KVO基本使用

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

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

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

  • IOS问题与解答

    对KVO原理的理解: 问:如何手动触发一个value的KVO 答:主动调用: willChangeValueFor...

  • KVO原理解析

    说说KVO的实现原理: 以Person为例通过runtime机制生成Person的一个子类NSKVONotifyi...

  • KVO的原理

    KVO基本原理: KVO深入原理: 适用于:

  • iOS KVO

    KVO 示例 KVO的实现原理

  • 知识集锦

    https://github.com/starainDou 欢迎点星 KVO实现原理 KVO基本原理: 1 kvo...

  • 了解 Key-Value Observing

    Key-Value Observing 为了理解KVO,首先需要了解KVC原理[https://www.jians...

网友评论

      本文标题:KVO原理理解2018-07-18

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