runtime具体应用

什么时候该用 runtime

runtime 适合“需要动态能力”的场景,而不是常规业务逻辑。常见应用包括埋点注入、模型映射、方法交换、关联对象扩展。

典型应用1:关联对象

当你不能直接改类定义(如系统类)但又想加属性时,可用关联对象:

  • objc_setAssociatedObject
  • objc_getAssociatedObject

常用于给 UIViewController 增加埋点标识、页面参数等。

典型应用2:方法交换(swizzling)

通过交换实现实现 AOP 风格能力,如统一日志、页面曝光统计。

实践原则:

  • 只在 +load 且配合 dispatch_once
  • 调用原实现,避免破坏系统行为
  • 为交换逻辑加开关,便于回滚

典型应用3:消息转发

用于兼容旧接口、桥接多实现对象或降级兜底。适合框架层,不建议在业务层大量使用。

风险点

  • 可读性下降,调试成本上升
  • 系统版本升级后兼容风险增加
  • 不当 swizzling 容易引发不可预期副作用

工程建议

  • runtime 代码集中到基础组件层
  • 写清注释和单元测试
  • 对关键注入点保留开关

总结

runtime 是“能力放大器”,也是“复杂度放大器”。把它用在真正需要动态能力的边界位置,收益才会大于风险。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""