一 runtime简介
1.runtime简称运行时 OC就是运行时机制,也就是在运行时的一些机制,其中最主要的是消息机制。
2.相比C语言 函数的调用时在编译的时候会决定调用哪个函数
3. 对于OC的函数属于动态的调用,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的还是才会根据函数的名字来找到对于的函数并且调用
二 runtime的作用
1 发送消息
方法调用的本质就是让对象发送消息
objc_msgSend 只有对象才能发送消息 所以以 objc开头
使用消息机制的前提 是要导入 #Import <objc/message>
可以使用 命令 clang -rewrite - objc main.m 查看最终生成的代码
下面举例说明
Dog *dog = [[Dog alloc] init];
//调用对象方法
[dog run];
本质就是 objc_msgSend(dog,@selector(run)) (如果报错 可以在 building seting 输入 msg 会出来 enable strict开头的 设置为NO就行)
//调用类方法
[Dog run] 或者 [[Dog class] run];
本质是调用了 objc_msgSend([Dog class],@selector(run))
二 交换方法
开发中使用的场景:系统自带的方法功能不够 给系统自带的方法扩展一些功能,并且仍能保持原有的功能
方法1 继承系统的类 重写方法
方法2 使用runtime交换方法