zoukankan      html  css  js  c++  java
  • KVC实现原理简介

      KVC,全称:Key-Value-Coding。

      KVC运用了isa-swizzling技术。isa-swizzling就是类型混合指针机制KVC主要通过isa-swizzling来实现其内部定位查找。isa指针(is a kind of),指向维护分发表的对象的类。该分发表实际上包含了指向实现类中的指针和其他数据。

    比如:8

    [dic setVaule:@"zhangsan" forKey:@"name"];

    当运行的时候就会被编译成:

    SEL sel = sel_get_uid("setValue:forKey:");
    IMP method = objc_msg_lookup(dic->isa,sel);
    method(dic,sel,@"zhangsan",@"name");

    其中,sel_get_uid函数是通过方法名得到一个方法选择器。

    objc_msg_lookup:如果我们想用OC运行函数得到一个IMP,就可以使用objc_msg_lookup函数 。

    这样KVC内部实现就可以这样描述了:

    一个对象在调用setValue的时候,

    1、根据方法名找到运行方法的时候所需要的环境参数。

    2、他会从自己isa指针结合环境参数,找到具体的方法实现接口。

    3、再直接查找得到的具体的方法实现。

  • 相关阅读:
    python中的继承和多态
    python中的深浅copy
    面向对象初识
    常用模块,异常处理
    递归,re,time,random
    内置函数,匿名函数
    生成器和迭代器
    记一次nginx由于文件过大的相关问题
    vue的Element+gin实现文件上传
    Vue问题汇总
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4799947.html
Copyright © 2011-2022 走看看