OC底层原理之Runtime

577 阅读1分钟

本系列主要是看完MJ的OC底层原理课程所写的总结,希望自己能加深对iOS底层的了解。

OC的信息机制

OC中的方法调用其实都是转成objc_msgSend函数的调用,给receiver(方法调用者)发送了一条信息(selector方法名

objc_msgSend底层有3大阶段

  • 消息发送(当前类、父类中查找)

  • 动态方法解析
  • 消息转发

Runtime的应用

  • 查看私有成员变量
  • 字典转模型
    • 利用Runtime遍历所有的属性或者成员变量
    • 利用KVC设值
  • 替换方法实现
    • class_replaceMethod
    • method_exchangeImplementations
  • 实现多继承
    • 利用forwardingTargetForSelector把相应的调用消息传给一个静态代理进行处理

注意事项

  • 进行消息转发的话,不会进行消息的缓存,所以每次调用方法都会遍历所有的父子类方法列表,从而导致性能的损耗,而动态方法解析则会进行方法的缓存,所以跟正常的消息发送的性能一致
    • 尽量避免使用消息转发