HTDelegateProxy 是一个 NSProxy 子类,允许您将多个代理分配给单个源。
请参阅关联的博客文章 http://engineering.hoteltonight.com/handling-multiple-delegates-in-ios
HTDelegateProxy 在两个简单的规则上运行
这种模式似乎在识别哪些消息是信息性的(嘿,发生了某件事)以及哪些消息是更复杂的交互(我应该如何做?)方面非常有效。
将 HTDelegateProxy.m/h 文件添加到您的项目中。
代理不会被保留,因此您必须保留对您的 HTDelegateProxy 实例的强引用。
例如,您可以如下使用 HTDelegateProxy 为 UIScrollView 分配多个代理
#import "HTDelegateProxy.h"
...
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) HTDelegateProxy *delegateProxy;
...
...
self.scrollView = [[UIScrollView alloc] init];
self.delegateProxy = [[HTDelegateProxy alloc] initWithDelegates:@[firstDelegate, secondDelegate]];
self.scrollView.delegate = (id)self.delegateProxy;
...
HTDelegateProxy 类故意不可变,以便强制在初始化 HTDelegateProxy 实例的同时设置对象的代理属性为良好的做法。这样做的原因是多setDelegate:实现 (例如,UIScrollView) 会提前在代理上调用 respondsToSelector:,而不是在要发送消息时(为了优化性能)。在这种情况下,如果那条消息通过 respondesToSelector:,那么仅会将消息发送到 HTDelegateProxy 的实例。
给作者 @jakejennings 和 @jonsibs 发推文,并查看 HotelTonight 的工程博客:http://engineering.hoteltonight.com
此外,请查看 HotelTonight 的其他 iOS 开源项目