Runtime(运行时)使用及详解

1.objc_msgSend

objc_msgSend(消息发送): 给某个对象,发送方法编号消息,通过SEL可以找到对应的IMP

2.MethodSwizzling

  • MethodSwizzling: OC编译阶段,动态地进行操作method_exchangeImplementations
  • class_addMethod resolveInstanceMethod

3.RunTime常见用法

  • ①给Category添加属性 - ②Button设置时间间隔
  • ③数据埋点:减少埋点所带来的侵入性
  • ④字典、模型互转 - ⑤自动归结档
  • ⑥查找内存泄漏 - ⑦通过Ivar指针改变实例变量的值(object_setIvar)

4.消息发送机制和消息转发机制的区别

消息发送机制:
使用运行时,通过SEL快速去查找IMP的过程
消息转发机制:
IMP找不到的时候,通过一些方法做转发处理
eg:动态添加方法,在resolveInstanceMethod类方法里面通过class_addMethod实现消息的动态转发

5.runtime -消息发送的整个过程,怎么查找

  • runtime消息发送给类对象的时候
  • objc_msgSend() 会去它元类中查找能够响应消息的方法实现(先找子类,后找父类)
  • 如果找到了,就会对这个类对象执行方法调用
  • 找不到时会到resolveInstanceMethod方法中,通过class_AddMethod实现消息的动态转发

6.数据埋点:运行时Method Swizzling机制与AOP编程

场景需求

统计UIViewController加载次数
统计UIButton点击次数
统计自定义方法的执行
统计UITableView的Cell点击事件
需要监听不同类,不同按钮,系统方法,及表单元点击事件

你可能感兴趣的:(Runtime(运行时)使用及详解)