本系列主要是看完MJ的OC底层原理课程所写的总结,希望自己能加深对iOS底层的了解。
OC的信息机制
OC中的方法调用其实都是转成objc_msgSend函数的调用,给receiver(方法调用者)
发送了一条信息(selector方法名
)
objc_msgSend底层有3大阶段
-
消息发送(当前类、父类中查找)
- 动态方法解析
- 消息转发
Runtime的应用
- 查看私有成员变量
- 字典转模型
- 利用Runtime遍历所有的属性或者成员变量
- 利用KVC设值
- 替换方法实现
- class_replaceMethod
- method_exchangeImplementations
- 实现多继承
- 利用forwardingTargetForSelector把相应的调用消息传给一个静态代理进行处理
注意事项
- 进行消息转发的话,不会进行消息的缓存,所以每次调用方法都会遍历所有的父子类方法列表,从而导致性能的损耗,而动态方法解析则会进行方法的缓存,所以跟正常的消息发送的性能一致
- 尽量避免使用消息转发