0

我正在使用 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;

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

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

它指出:

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

调用setTarget时好像传了self,是不是说setArgument方法中不需要传入&self参数?

谢谢

4

1 回答 1

0

文档只是告诉第一个参数(索引为 0)代表目标对象(所以是“自我”)。正如文档向您解释的那样,第一个参数是使用该setTarget:方法设置的。

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

于 2012-07-26T08:02:31.253 回答