Runtime学习笔记

RunTime学习

1. 将OC代码转化成C++代码

使用终端,cd到目标文件夹,再执行clang命令,例如 clang -rewrite-objc main.m

Runtime学习笔记_第1张图片
main.m转换成C++代码

可见,源码中,NSObject调用alloc方法以分配内存,实际上是给NSObject类发送alloc消息,objc_msgSend函数有多个参数,第一个参数是给谁发送消息,也就是谁在调用方法,第二个参数是调用什么方法,注册方法编号,然后根据方法编号在内存空间中找到对应的方法列表中的方法,再根据方法列表中的方法找到方法区中对应的方法实现,后面的参数是方法的参数。

2. 消息机制

使用runtime,需要导入,该库内部引入了,然后build Setting -> 搜索 msg -> 设置为NO

Runtime学习笔记_第2张图片
3. 方法交换

使用runtime,可以在运行时交换两个方法的实现,这也就是传说中的苹果黑魔法。

Runtime学习笔记_第3张图片

添加UIImage分类,在分类中的load方法中实现方法交换,方法交换的前提是需要有两个方法,所以自己需要写一个方法。


Runtime学习笔记_第4张图片
Snip20161022_7.png

方法交换过程:


Runtime学习笔记_第5张图片
方法交换思路图

你可能感兴趣的:(Runtime学习笔记)