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、再直接查找得到的具体的方法实现。