1.什么是runtime运行时?
runtime运行时是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API。
在我们平时编写的OC代码中, 程序运行过程中, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者
比如说,下面一个创建对象的方法中, alloc方法和init方法,最终都是通过运行时发送消息来实现(消息机制)
1 //OC: 2 [[LJPerson alloc] init] ; 3 //runtime : 使用runtime时导入 <objc/runtime.h>即可 4 objc_msgSend(objc_msgSend(“LJPerson” , “alloc”), “init”);
2.runtime 有什么用?
runtime是属于OC的底层, 可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)
- 在程序运行过程中, 动态创建一个类(比如KVO的底层实现)
- 在程序运行过程中, 动态地为某个类添加属性\方法, 修改属性值\方法\方法的实现
- 遍历一个类的所有成员变量(属性)\所有方法
*代码可以参考MJExtention框架 - 交换两个方法的实现(主要用来对系统自带的方法做些修改)
3.runtime 中经常用到的函数:
- objc_msgSend : 给对象发送消息
- class_copyMethodList : 遍历某个类所有的方法
- class_copyIvarList : 遍历某个类所有的成员变量
- class_getClassMethod :获得某个类的类方法
- class_getInstanceMethod:获得某个类的对象方法
- class_getMethodImplementation :获得某个类的某个方法的实现;
- method_setImplementation :设置某个方法的实现
- method_exchangeImplementations :交换两个方法的实现
4.应用举例:
待写。。。。。。
时间: 2024-10-06 18:34:40