Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS上线程函数的参数_Ios_Objective C_Cocos2d Iphone - Fatal编程技术网

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]