RunTime学习
1. 将OC代码转化成C++代码
使用终端,cd到目标文件夹,再执行clang命令,例如 clang -rewrite-objc main.m
可见,源码中,NSObject调用alloc方法以分配内存,实际上是给NSObject类发送alloc消息,objc_msgSend函数有多个参数,第一个参数是给谁发送消息,也就是谁在调用方法,第二个参数是调用什么方法,注册方法编号,然后根据方法编号在内存空间中找到对应的方法列表中的方法,再根据方法列表中的方法找到方法区中对应的方法实现,后面的参数是方法的参数。
2. 消息机制
使用runtime,需要导入<objc/message.h>,该库内部引入了<objc/runtime.h>,然后build Setting -> 搜索 msg -> 设置为NO
3. 方法交换
使用runtime,可以在运行时交换两个方法的实现,这也就是传说中的苹果黑魔法。
添加UIImage分类,在分类中的load方法中实现方法交换,方法交换的前提是需要有两个方法,所以自己需要写一个方法。
方法交换过程: