KVC 实现机理分析

转载 2012年03月28日 11:55:38

 

Key-Value Coding(KVC)实现分析

 

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

比如说如下的一行KVC的代码:

[site setValue:@"sitename" forKey:@"name"];


就会被编译器处理成:

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


首先介绍两个基本概念:

(1)SEL数据类型:它是编译器运行Objective-C里的方法的环境参数。

(2)IMP数据类型:他其实就是一个编译器内部实现时候的函数指针。当Objective-C编译器去处理实现一个方法的时候,就会指向一个IMP对象,这个对象是C语言表述的类型(事实上,在Objective-C的编译器处理的时候,基本上都是C语言的)。

关于如何找到实现函数的指针,可参考文章:《Objective-C如何避免动态绑定,而获得方法地址》:http://www.cocoadev.cn/Objective-C/Get-method-address.asp

这下KVC内部的实现就很清楚的清楚了:一个对象在调用setValue的时候,(1)首先根据方法名找到运行方法的时候所需要的环境参数。(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。(3)再直接查找得来的具体的方法实现。

KVO/KVC 实现机理分析

Objective-C里面的Key-Value Observing (KVO)机制,非常不错,可以很好的减少浇水代码。关于KVO的学习,可以参考文章:《Key-Value Observing快速入门》...
  • lusonglin121
  • lusonglin121
  • 2013年07月19日 09:26
  • 783

KVO/KVC 实现机理分析

作者:杨登峰 (dengfengyang@gmail.com) 时间:2010-03-12 转帖请注明转之 苹果开发中文网(http://www.CocoaDev.cn) 以上说明是...
  • baxiaxx
  • baxiaxx
  • 2013年05月09日 14:43
  • 537

KVO/KVC 实现机理分析

全称: Key Value Observing 在ios里,可以添加观察者模式,来实现某个property更改后,通知指定的类。 然后到observeValueForKeyPath:ofObjec...
  • u013773524
  • u013773524
  • 2016年04月17日 20:27
  • 138

讲解 KVO/KVC 实现机理分析

Objective-C里面的Key-Value Observing (KVO)机制,非常不错,可以很好的减少浇水代码。关于KVO的学习,可以参考文章:《Key-Value Observing快速入门》...
  • u012515331
  • u012515331
  • 2014年03月06日 17:30
  • 411

KVC/KVO 进阶(一) 底层原理

导语 上篇文章介绍了一些KVC/KVO的简单用法,本篇介绍一下KVC/KVO的底层原理。 创建 person 和 car 类person.h@class Car; @interface Persi...
  • u014641631
  • u014641631
  • 2016年10月27日 15:32
  • 373

KVC的原理和用法

Key-Value-Coding:KVC顾名思义就是键值编码,通过[setValue:@"value" forKey:@"key"]来添加一组对象,编译器会把这行代码处理为SEL sel       ...
  • u011146511
  • u011146511
  • 2017年03月16日 21:32
  • 295

KVC/KVO底层实现原理

KVC: Key-value coding is a mechanism for indirectly accessing anobject’s attributes and relationship...
  • wzxq123
  • wzxq123
  • 2016年05月27日 17:15
  • 1790

KVC方法详解与实现原理

KVC提供了一种在运行时而非编译时动态访问对象属性与成员变量的方式,该方法不需要调用get和set方法和变量实例就可以访问对象,KVC默认的实现方法有NSOject提供,这种方法及支持对象也支持简单数...
  • ycxmartin111111
  • ycxmartin111111
  • 2014年12月23日 17:54
  • 1907

使用KVC进行字典转模型

在项目中我们一般的都会碰到Json字段请求回来进行模型封装的情况,一般我们是建立一个Model然后Model里面有Json请求回来的模型字典里的各种字段,类似 name,age…….之类的。封装的时候...
  • xiaocai159753
  • xiaocai159753
  • 2015年04月26日 19:37
  • 1658

iPhone程序开发 KVO/KVC实现机理分析

iPhone程序开发KVO/KVC实现机理分析是本文要介绍的内容,不多说,直接进入话题。我们来看详细内容。 Objective-C里面的Key-Value Observing (KVO)机制,非...
  • LianZeBK
  • LianZeBK
  • 2014年10月30日 17:35
  • 260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:KVC 实现机理分析
举报原因:
原因补充:

(最多只允许输入30个字)