【发布时间】:2015-07-27 06:56:26
【问题描述】:
所以我正在寻找into message forwarding 并运行一些单元测试,因为我遇到了一些稀缺的资源,包括苹果自己品牌的使用forwardInvocation: 的文档,据我所知需要methodSignatureForSelector: 才能工作。
现在我知道methodSignatureForSelector: 需要查看您尝试将消息转发到的对象是否具有匹配的方法名称和参数,以便它可以调用forwardInvocation: 我的问题是为什么在苹果文档中它说像这样调用methodSignatureForSelector: 的超类实现......
- (NSMethodSignature*)methodSignatureForSelector:(SEL)selector
{
NSMethodSignature* signature = [super methodSignatureForSelector:selector];
if (!signature) {
signature = [surrogate methodSignatureForSelector:selector];
}
return signature;
}
在我看来,这似乎是在说“如果我继承的所有类都没有处理此方法的方法,请检查代理对象是否有。”
在谈判方法方面,苹果给出的例子是勇士代替外交官行事。鉴于这个例子,我不明白你为什么要检查战士或其任何父母是否有适当的方法签名来转发。所以这让我相信它的存在是出于另一个原因,一个我想不出来的原因,有人可以给我一个例子或帮助澄清我可能遗漏的地方吗?
TL;DR
为什么我需要[super methodSignatureForSelector:selector];?
【问题讨论】:
标签: ios objective-c method-signature message-forwarding