OC底层原理之Runtime

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

OC的信息机制

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

objc_msgSend底层有3大阶段

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

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

Runtime的应用

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

注意事项

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

转载于:https://juejin.im/post/5cbad4f8f265da038364c242

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值