iOS runtime运行机制
2016-04-14 12:09
316 查看
1.RunTime概念
RunTime简称运行时,就是系统在运行的时候的一些机制。对于C语言而说,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,但是对于OC来说,函数的调用指的是消息发送,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数进行调用。消息发送的步骤:
1.通过obj的isa指针找到obj对应的class,在class中的cache通过SEL查找对应的method,如果找到了通过method中的指针跳转到对应的函数中执行,否则进入2;
2.若在cache中没有找到,则去methodList中去查找,如果找到了通过method中的指针跳转到对应的函数中执行,否则进入3;
3.若在methodList也没有找到的话,则去superClass中去查找,若果找到了通过method中的指针跳转到对应的函数中执行,否则进入4;
4.如果找到了通过method中的指针跳转到对应的函数中执行,则将method加入到cache中,以便下次查找。
2.RunTime中的具体实现
a.OC的变量调用在RunTime中具体实现
a)OC调用PPMember的属性变量PPMember.name
b)在编译的时候RunTime会这样找到name
Ivar *ivar = class_copyIvarList([PPMember class],&count);
const char *varName = ivar_getName(var);
b.OC的方法调用在RunTime中具体实现
a)OC中调用一个方法[self setUI];
b)在编译的时候RunTime会将上述代码转化成
objc_msgSend(self,@selector(setUI));
3.RunTime的常见作用
a)动态的添加对象的成员变量和方法;b)动态交换两个方法的实现;
c)实现分类并添加属性;
d)实现NSCoding的自动归档喝解档;
e)实现字典转模型的自动转换。
4.代码实现
相关文章推荐
- iOS编程--AVCapture编程理解--自定义相机
- IOS开发语言OC的基本语法以及结构
- iOS的Target-Action模式传值的最佳方式
- 在 iOS 上捕获视频
- iOS 设置启动图片
- iOS 视频相关
- IOS Quartz2D简介
- iOS 自动布局库 SDAutoLayout
- IOS 对象的归档与解档
- iOS 局部变量 setTag后可在别的地方调用 viewWithTag
- ios配置xmpp即时聊天-服务器端
- iOS - GCD 之线程死锁
- Masonry教程--IOS自适配,丢掉Autolayout吧
- iOS解决navigationBar因为图片尺寸问题造成的会向上偏移64的问题
- iOS开发之友盟推送配置教程
- IOS Crash捕获
- iOS 拍照保存到相册
- iOS源码地址
- ios获取设备信息总结
- ios界面设计学习之布局