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
添加到您的项目中。