我正在使用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参数?
由于
答案 0 :(得分:0)
文档只告诉第一个参数(带有indice 0)代表目标对象(所以“self”)。正如文档所解释的那样,第一个参数是使用setTarget:
方法设置的。
您需要保留此行代码[invocation_ setArgument:&self atIndex:2];
以将按钮的引用发送到目标 - 操作对。