因此,当我遇到一些资源匮乏的情况时,我正在研究消息转发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];
?