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 方法,那么在包含 A、B 和 C(按照此顺序)的 AIMultiDelegate 上调用 getInt 将返回 2。AIMultiDelegate 不会对其添加的对象保持强引用。respondsToSelector: 来提高性能,因此请确保在将 AIMultiDelegate 设置为代理之前,将所有代理都添加到 AIMultiDelegate 中。如果您正在使用 CocoaPods,将其添加到您的 Podfile 中。
pod 'MultiDelegate'否则将 AIMultiDelegate.h/.m 添加到您的项目中。