0%

使用对象包装实现多代理

多代理的实现方式有很多,如:

  • 使用 NSPointerArray 存储 weak delegate;
  • 使用 NSHashTable 存储 weak delegate;
  • 使用 NSProxy 进行转发;
  • 使用 NSObject 封装 target 和 selector,进行遍历调用。

本文讨论的是最后一种,但可以结合 NSProxy 进行高效的转发。

实现原理

对象封装 weak target,和 selector,使用数组存储这个封装对象,在回调的地方,遍历数组调用各个代理方法。

封装对象命名

  • Delegator

结合 NSProxy 便捷消息转发

NSProxy 可以实现消息的转发,具体可见 YYWeakProxy 的实现,其可以实现消息转发以达到,调用 proxy 的方法,直接就是调用 target 的方法。

如果结合了 NSProxy,则可以少一层存储和调用 selector 的逻辑。

QMUI 的多代理

QMUI 的多代理实现有点巧妙,其使用方法注入,对 delegate 的 setter 和 getter 属性进行修改,变成调用其容器中的多代理方法。

而其容器也进行了封装,具体看 QMUIMultipleDelegates 的实现。

欢迎关注我的其它发布渠道