您正在查看 DFCourier 旧版本(1.0.5)的文档。
通过实现 DFCourierDelegate
协议,可以方便地为每个选择器分配使用的方法签名和传向哪个对象的代理。
- (DFCourierProxyOption)proxyOptionForSelector:(SEL)aSelector;
DFCourier
在收到方法调用后将会询问它的代理关于代理选项。
typedef NS_OPTIONS(NSUInteger, DFCourierProxyOption) {
DFCourierProxyOptionNone = 0,
DFCourierProxyOptionBefore = 1 << 0,
DFCourierProxyOptionAfter = 1 << 1,
DFCourierProxyOptionInstead = 1 << 2,
DFCourierProxyOptionReserve = 1 << 3,
DFCourierProxyOptionAlways = 1 << 4,
};
您可以组合使用这些选项。
@property (nonatomic, weak) id target;
@property (nonatomic, weak) id proxy;
DFCourier 实例在其属性中有两个对象:目标和代理。 DFCourierProxyOption
决定了方法的调用的方式
DFCourierProxyOptionNone
: 在目标上调用原始方法;
DFCourierProxyOptionBefore
: 在询问目标的方法签名和转发消息给目标之间,向代理发送一个重复的消息。代理的返回值将被丢弃;
DFCourierProxyOptionAfter
: 在转发消息给目标之后向代理发送一个重复的消息。代理的返回值将被丢弃;
DFCourierProxyOptionInstead
: 承接目标的方法签名然后转发消息给代理;
DFCourierProxyOptionReserve
: 承接目标的方法签名,如果失败,则要求代理提供它;
DFCourierProxyOptionAlways
: 在代理上调用;
- (GXCourierProxyOption)proxyOptionForSelector:(SEL)aSelector
{
if ([selectorString isEqualToString:NSStringFromSelector(@selector(tableView:didSelectRowAtIndexPath:))]) {
return GXCourierProxyOptionAfter | GXCourierProxyOptionAlways;
}
return GXCourierProxyOptionNone;
}
在这个例子中,我们正在监视一个 UITableViewDelegate 方法,我们可以创建一个工具来协调 2 个表视图的滚动而不重置它们的代理。
respondsToSelector:
此方法也在控制之下,其方法转发将遵循与创建该选择器的相同规则。
conformsToProtocol:
isKindOfClass:
isMemberOfClass:
如果以下属性设置为 true
,这三个方法也可以被控制
@property (nonatomic) BOOL isProtocolForwarding;
@property (nonatomic) BOOL isInheritanceForwarding;
@property (nonatomic) BOOL isClassForwarding;
MIT 许可证 (MIT)
版权所有(c) 2016 fangqiuming
在此特此授予任何获得本软件及其相关文档副本(以下简称"软件")的个人以免费使用、复制、修改、合并、发布、分发、许可和/或出售软件副本的权利,并允许被提供软件的个人进行上述行为,但需遵守以下条件
上述版权声明和本许可声明应包含在软件的任何副本或其主要部分的副本中。
软件按“现状”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权性。在任何情况下,作者或版权所有者都不会对任何主张、损害或其他责任负责,无论该责任是由于合同、侵权或其他任何原因引起的,以及软件或其使用或其他相关行为。