forwardInvocation到nil对象

时间:2014-03-23 02:57:16

标签: ios objective-c objective-c-runtime

我有一个对象(A)需要作为另一个对象的代理。还有一个条件是,在验证时应该使对象工作为零。

我已实施:

-(void)forwardInvocation:(NSInvocation *)anInvocation
{
    if (condition)
        [anInvocation invokeWithTarget:self.object];
    else
        [anInvocation invokeWithTarget:nil];
}

但这还不够。当条件满足并且在unrecognized selector sent to instance上调用方法时。

1 个答案:

答案 0 :(得分:0)

来自NSInvocation类引用中invoke的文档:

  

在调用此方法之前,必须设置接收者的目标,选择器和参数值。

如果您尚未设置target(或将其设置为nil,这基本上是相同的事情),则不应该调用此调用。如果你想模仿发送消息到nil的行为,你可以只返回0 / nil - 如果目标是nil,这是objc_msgSend的默认行为。如果您有兴趣了解其工作原理,可以查看here,了解objc_msgSend的实现概况(公平警告,全部是汇编)。