标签:
方法调用:
// 对象属性
// 类似: Person -> name setValue: forKey: // 对象的属性或者 属性的属性...... 可见它已经包含前者.
// 类似: Person -> car -> name setValue: forKeyPath:
KVC运用了一个isa-swizzling技术。isa-swizzling就是类型混合指针机制, 将2个对象的isa指针互相调换, 就是俗称的黑魔法。
KVC主要通过isa-swizzling,来实现其内部查找定位的。默认的实现方法由NSOject提供
isa指针,如其名称所指,(就是is a kind of的意思),指向分发表对象的类。该分发表实际上包含了指向实现类中的方法的指针,和其它数据。
比如说如下的一行KVC的代码:
[object setValue:@"134567" forKey:@"uid"]; 就会被编译器处理成: // 首先找到对应sel SEL sel = sel_get_uid("setValue:forKey:"); // 根据object->isa找到sel对应的IMP实现指针 IMP method = objc_msg_lookup (object->isa,sel); // 调用指针完成KVC赋值 method(object, sel, @"134567", @"uid");
标签:
原文地址:http://www.cnblogs.com/MrTao/p/5825457.html