使用xcode中的线程调用函数

时间:2012-05-03 07:42:26

标签: objective-c ios xcode nsthread

我在xcode中创建了一个线程,我已经给出了从该线程调用的函数名称。   但我的问题是没有调用给调用的函数名称(在该函数中放置断点时才知道)

代码:

 NSThread* myThread; 
 [myThread start]; 
 [self performSelector:@selector(func1:) onThread:myThread withObject:nil waitUntilDone:false]

后来我也试过这个:

NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(func1:)object:nil];
[myThread start]; 

以上func1是要调用的函数的名称。

所以任何人都可以告诉我如何创建线程并从那里调用func1 ....

3 个答案:

答案 0 :(得分:16)

在您的第一个代码示例中,您实际上看起来并不是在创建新线程。您创建了一个空的myThread变量,然后在其上调用start,但这只会导致start被发送到nil。然后将空线程变量发送到performSelector:onThread:withObject:waitUntilDone:方法,该方法可能无效。

在使用performSelector:onThread:withObject:waitUntilDone:实际运行某些内容之前,您需要正确创建一个帖子。

或者,假设您不关心该方法运行的后台线程,只需使用performSelectorInBackground:withObject:就会容易得多。例如:

[self performSelectorInBackground:@selector(func1:) withObject:nil];

答案 1 :(得分:3)

如果有效,请尝试以下操作:

[NSThread detachNewThreadSelector:@selector(func1) toTarget:self withObject:nil];

由于您没有将任何对象传递给“func1”(也就是说:您的方法没有参数),因此您无需在其名称后面加上“:”。

答案 2 :(得分:0)

如果你的func1接受一个参数。那肯定它必须使用您使用的第二种方法。可能是你的fuc1没有正式的参数,你还在调用@selector(fuc1 :)中的选择器并将对象作为nil传递。所以可能是由于这个原因它不起作用。这可能是一个原因。如果没有,请试试。