我在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 ....
答案 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传递。所以可能是由于这个原因它不起作用。这可能是一个原因。如果没有,请试试。