NSInvocation是否应该将自己作为2d indice参数传递?

时间:2012-07-25 03:44:18

标签: ios xcode arguments nsinvocation

我正在使用cocos2d进行开发。我试图包装一个自定义按钮类。当试图使按钮响应我分配给它的选择器时,我使用了NSInvocation。在其中,MyButton就是这样的。

if( target && sel ) {
            sig = [target methodSignatureForSelector:sel];
            invocation_ = nil;
            invocation_ = [NSInvocation invocationWithMethodSignature:sig];
            [invocation_ setTarget:target];
            [invocation_ setSelector:sel];
            [invocation_ setArgument:&self atIndex:2];
            [invocation_ retain];
        }

我已经通过了sel这样的函数:

- (void)onButtonClicked:(id)sender;

我的问题是:是否有必要在MyButton的实现中添加此行[invocation_ setArgument:&self atIndex:2];

我有这个问题是因为根据ios文档在这里: NSInvocation Class Reference

它解决了这个问题:

  

索引0和1表示隐藏的参数self和_cmd,   分别;您应该使用setTarget直接设置这些值:   和setSelector:方法。使用索引2和更大的参数   通常传递给消息。

在调用setTarget时似乎已经传递了self,这是否意味着,并不需要在setArgument方法中传递& self参数?

由于

1 个答案:

答案 0 :(得分:0)

文档只告诉第一个参数(带有indice 0)代表目标对象(所以“self”)。正如文档所解释的那样,第一个参数是使用setTarget:方法设置的。

您需要保留此行代码[invocation_ setArgument:&self atIndex:2];以将按钮的引用发送到目标 - 操作对。