5

我在 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 ....

4

3 回答 3

16

在您的第一个代码示例中,您实际上并没有创建一个新线程。您创建一个空myThread变量,然后调用start它,但这只会导致start被发送到nil. 然后将空线程变量发送到performSelector:onThread:withObject:waitUntilDone:可能什么都不做的方法。

您需要先正确创建一个线程,然后才能使用performSelector:onThread:withObject:waitUntilDone:.

或者,假设您不关心该方法在哪个后台线程上运行,那么简单地使用performSelectorInBackground:withObject:. 例如:

[self performSelectorInBackground:@selector(func1:) withObject:nil];
于 2012-05-03T08:01:53.003 回答
3

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

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

由于您没有将任何对象传递给您的“func1”(又名:您的方法没有参数),因此您无需将“:”放在其名称之后。

于 2012-05-03T07:51:15.987 回答
0

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

于 2013-03-15T05:51:24.933 回答