iphone @selector 有两个参数
我有一个这样的方法:
-(void)A:(int)a B:(int)b{
}
并且想将该方法放入一个新线程中:
NSInvocationOperation *theOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(A:B:) object:nil];
但是“EXC_BAD_ACCESS”。
I have a method like this:
-(void)A:(int)a B:(int)b{
}
and want to put the method into a new thread:
NSInvocationOperation *theOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(A:B:) object:nil];
but "EXC_BAD_ACCESS".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用
NSInitationOperation
调用的方法只能采用单个参数,并且该参数必须是 Objective-C 对象(如NSNumber
),而不是普通的 C 类型(如 <代码> int )。通常,要处理多个参数,您可以使用 NSDictionary 或 NSArray 来保存参数:
或者,您可以使用
NSInitation
对象来调用您的方法。这允许任意数量和任意类型的参数,但通常将参数放入 NSDictionary 中比构造 NSInitation 对象要容易得多。有关如何使用 NSInitation 的信息。
The method you invoke with
NSInvocationOperation
can only take a single parameter, and that parameter must be an Objective-C object (likeNSNumber
) and not a plain C type (likeint
).Typically, to handle multiple parameters you use an NSDictionary or NSArray to hold the parameters:
Alternatively, you can use an
NSInvocation
object to invoke your method. This allows any number and any type of parameters, but it's typically much easier to just put your parameters in an NSDictionary than to construct an NSInvocation object.Information on how to use NSInvocation.
如果可能,尝试使用一个数组或字典作为选择器的参数。
然后,当您调用时,将两个参数转换为一个对象(数组或字典)并发送该对象。
在选择器中,我认为您可以从数组或字典中获取它们。
If possible, try to have one array or dictionary as the parameter to the selector.
Then when you are invoking convert your two params into one object (either array or dictionary) and send that object.
In the selector, i think you can get them back from array or dictionary.
来自 Apple 的文档:“运行操作时调用的选择器。选择器可以采用 0 或 1 个参数;”。因此,如果您想调用具有更多参数的方法,请创建一个具有单个参数的额外方法,然后从那里调用具有更多参数的方法。
From Apple's docs: "The selector to invoke when running the operation. The selector may take 0 or 1 parameters;". So if you want to call a method with more parameters, create an extra method with a single parameter and call the method with more parameters from there.
您不需要第二个 B:
用法是:
You don't need the second B:
usuage would be: