iOS上线程函数的参数
我在用一个线程函数进行测试。但是程序总是反馈错误。我猜这个错误可能与线程函数的参数有关,但我不知道如何修复它。提前谢谢!代码如下:iOS上线程函数的参数,ios,objective-c,cocos2d-iphone,Ios,Objective C,Cocos2d Iphone,我在用一个线程函数进行测试。但是程序总是反馈错误。我猜这个错误可能与线程函数的参数有关,但我不知道如何修复它。提前谢谢!代码如下: -(void) doSomething:(id)p { if((int)p == 100) NSLog(@"100"); else NSLog(@"101"); } int a = 100; [self performSelectorInBackground:@selector(doSomething:) withObject:
-(void) doSomething:(id)p
{
if((int)p == 100)
NSLog(@"100");
else
NSLog(@"101");
}
int a = 100;
[self performSelectorInBackground:@selector(doSomething:) withObject:a];
请阅读
PerformSelect或InBackground:withObject:
的文档a
不是对象,它是一种基本类型
您需要将该值包装在NSNumber
中
-(void) doSomething:(NSNumber *)p
{
if([p intValue] == 100)
NSLog(@"100");
else
NSLog(@"101");
}
int a = 100;
[self performSelectorInBackground:@selector(doSomething:) withObject:@(a)];
或者您可以使用GCD:
-(void) doSomething:(int)p
{
if(p == 100)
NSLog(@"100");
else
NSLog(@"101");
}
int a = 100;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self doSomething:a];
});
请阅读
PerformSelect或InBackground:withObject:
的文档a
不是对象,它是一种基本类型
您需要将该值包装在NSNumber
中
-(void) doSomething:(NSNumber *)p
{
if([p intValue] == 100)
NSLog(@"100");
else
NSLog(@"101");
}
int a = 100;
[self performSelectorInBackground:@selector(doSomething:) withObject:@(a)];
或者您可以使用GCD:
-(void) doSomething:(int)p
{
if(p == 100)
NSLog(@"100");
else
NSLog(@"101");
}
int a = 100;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self doSomething:a];
});
你应该这样做
[self performSelectorInBackground:@selector(doSomething:) withObject:[NSNumber numberWithInt:a]];
withObject只接受object,int是基本数据类型。您应该执行以下操作
[self performSelectorInBackground:@selector(doSomething:) withObject:[NSNumber numberWithInt:a]];
withObject只接受object,int是原始数据类型。不需要这个答案@rmaddy提供足够的信息。它们之间只相隔一分半钟,@Reformer;他们大概是在同一时间开始研究自己的答案的。@Reformer发布一个与另一个答案基本相同的答案并不违法。将两个答案结合起来可能会让人更好地理解。不需要这个答案@rmaddy就可以提供足够的信息。它们之间只有一分半的距离,@Reformer;他们大概是在同一时间开始研究自己的答案的。@Reformer发布一个与另一个答案基本相同的答案并不违法。将两个答案结合起来可能有助于更好地理解。请记住:cocos2d不是线程安全的,如果您访问或修改后台线程中的节点,则可能会崩溃请记住:cocos2d不是线程安全的,如果您访问或修改后台线程中的节点,则可能会崩溃如果您不熟悉新的装箱符号和你对Maddy的答案如何“将值包装在NSNumber中”感到困惑,
@(a)
是[NSNumber numberWithInt:a]
的语法糖。如果你不熟悉新的装箱符号,你对Maddy的答案如何“将值包装在NSNumber中”感到困惑,@(a)
是的语法糖[NSNumber numberwhithint:a]
。