HTDelegateProxy 1.0.1

HTDelegateProxy 1.0.1

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布上次发布2014年12月

未声明 维护。



  • Jacob Jennings

概述

HTDelegateProxy 是一个 NSProxy 子类,允许您将多个代理分配给单个源。
请参阅关联的博客文章 http://engineering.hoteltonight.com/handling-multiple-delegates-in-ios

HTDelegateProxy 在两个简单的规则上运行

  1. 具有 void 返回类型的消息会发送给所有响应对 selector 的目标代理
  2. 具有非 void 返回类型的消息只会发送到列表中第一个响应对 selector 的代理。

这种模式似乎在识别哪些消息是信息性的(嘿,发生了某件事)以及哪些消息是更复杂的交互(我应该如何做?)方面非常有效。

安装

其他人

将 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 开源项目