我正在使用 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参数?
谢谢