runtime
Posted 时空矩人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了runtime相关的知识,希望对你有一定的参考价值。
1. runtime 就是运行时, 运行时就说动态调用
2. OC就是运行时机制, 也就是在运行的时候的一些机制, 其中最主要的是消息机制
3. 对应C语言, 函数的调用在编译的时候就决定调用哪个函数, 对于OC, 函数的调用属于动态调用过程, 在编译的时候不能真正决定调用哪个函数, 只有在正在运行的时候才会根据函数的名称找到对于的函数来调用
4. 编译阶段, OC可以调用任意函数, 即使某个函数只有声明没有实现, 但是C中就会报错
什么是消息机制?
OC 方法的调用就说发送消息
//注: Xcode6 开始苹果就不推荐使用runtime了, 把很多函数的参数注释了, 这样是为了让用户更加依赖自己, Xcode7 以后有很多私有的成员变量都被屏蔽了
runtime使用场景
1. 如果想调用一个没有暴露出来的方法(没有在.h文件中声明的方法), 或者系统的方法
2. 写自己框架
runtime 的作用
- 发送消息
1. 导入头文件
#import <objc/message.h> 或者<objc/runtime.h>
2. Xcode编译设置
工程 --> TARGETS --> build Settings --> 搜索 msg --> 将严格检查OC消息机制 的值设置为NO
3.
Person *p = [Person alloc];
=> Person *p = objc_msgSend([Person class] @selector(alloc));
p = [p init];
=> objc_msgSend(@selector(init));
[p eat];
objc_msgSend(p, @selector(eat));
4. 方法调用的流程: (方法调用的本质是发送消息)
1. 寻找方法, (对象方法保存在类里,每个类里都有一个方法列表), 根据isa指针去找到对应的类
2. 根据方法编号去方法列表里找到对应的方法, @selector(eat)返回的就是方法编号
3. 调用方法即可
- 交换方法
说明
- 动态添加方法
说明
- 给分类添加属性
说明
- 字典转模型
说明
以上是关于runtime的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发runtime学习:一:runtime简介与runtime的消息机制