MultiDelegate 0.0.4

MultiDelegate 0.0.4

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2015年10月

Alejandro Isaza 维护。



  • Alejandro Isaza

MultiDelegate 是 Objective-C 的一个代理多路复用类。换句话说,它将把代理方法分散到多个对象上,而不是仅限于一个代理对象。您也可以将其用作通用的方法派发机制。更多详情请参阅 博客文章

示例

假设您有一个 UITableView 并且您想使用两个独立的类来实现数据源:一个是实现 tableView:numberOfRowsInSection: 方法的实际数据源,另一个是实现 tableView:cellForRowAtIndexPath: 方法的单元格工厂,用于构建单元格。

首先创建一个 AIMultiDelegate 实例。您需要对这个实例保持一个强引用,因为大多数对象不会保持他们的代理。

_multiDelegate = [[AIMultiDelegate alloc] init];

然后将所有实际代理添加到 _multiDelegate 对象。

[_multiDelegate addDelegate:self];
[_multiDelegate addDelegate:_dataSource];

最后设置表格的数据源为代理多路复用器。

self.tableView.dataSource = (id)_multiDelegate;

详细的示例代码请参阅示例项目。

注意

请记住以下事项:

  • 每个方法调用都将按照添加的顺序转发到列表中的每个对象。
  • 如果方法返回一个值,则返回值将从响应方法的最后一个对象中获取。例如,如果对象 A 通过返回 1 实现 getInt 方法,对象 B 通过返回 2 实现 getInt 方法,而对象 C 没有实现 getInt 方法,那么在包含 ABC(按照此顺序)的 AIMultiDelegate 上调用 getInt 将返回 2
  • AIMultiDelegate 不会对其添加的对象保持强引用。
  • 一些对象只在您第一次设置代理时调用 respondsToSelector: 来提高性能,因此请确保在将 AIMultiDelegate 设置为代理之前,将所有代理都添加到 AIMultiDelegate 中。

安装

如果您正在使用 CocoaPods,将其添加到您的 Podfile 中。

pod 'MultiDelegate'

否则将 AIMultiDelegate.h/.m 添加到您的项目中。