美文网首页iOS
问题:KVC的底层实现原理

问题:KVC的底层实现原理

作者: 姜小舟 | 来源:发表于2020-05-11 14:15 被阅读0次

    KVC主要通过isa来实现其内部查找定位的。默认的实现方法由NSOject提供isa指针, 如其名称所指,(就是is a kind of的意思), 指向分发表对象的类. 该分发表实际上包含了指向实现类中的方法的指针, 和其它数据。

    具体主要分为三大步
    • 第一步:寻找该属性有没有setsetter方法?有,就直接赋值
    • 第二步:寻找有没有该属性带下划线的成员属性?有,就直接赋值
    • 第三步:寻找有没有该属性的成员属性?有,就直接赋值
    或者这么说:
    • 1.首先搜索setKey:方法.(key指成员变量名, 首字母大写)
    • 2.上面的setter方法没找到, 如果类方法accessInstanceVariablesDirectly返回YES. 那么按 _key, _isKeykey, iskey的顺序搜索成员名.(NSKeyValueCodingCatogery中实现的类方法, 默认实现为返回YES)
    • 3.如果没有找到成员变量, 调用setValue:forUnderfinedKey:
    [object setValue:@"13123" forKey:@"uuid"];
    
    就会被编译器处理成:
    // 1.首先找到对应sel
    SEL sel = sel_get_ uuid("setValue:forKey:");
    // 2.根据object->isa找到sel对应的IMP实现指针
    IMP method = objc_msg_lookup (object->isa,sel);
    // 3.调用指针完成KVC赋值
    method(object, sel, @"13123", @"uuid");
    

    相关文章

      网友评论

        本文标题:问题:KVC的底层实现原理

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