Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.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
Objective c 在xcode中使用线程调用函数_Objective C_Ios_Xcode_Nsthread - Fatal编程技术网

Objective c 在xcode中使用线程调用函数

Objective c 在xcode中使用线程调用函数,objective-c,ios,xcode,nsthread,Objective C,Ios,Xcode,Nsthread,我在xcode中创建了一个线程,并给出了从该线程调用的函数名。 但我的问题是,给定调用的函数名没有被调用(当在该函数中放置断点时才知道) 代码: 后来我也试过这个: NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(func1:)object:nil]; [myThread start]; 上面的func1是要调用的函数的名称 因此,任何人都可以告诉我如何创建线程并从那里调用func1…

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

代码:

后来我也试过这个:

NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(func1:)object:nil];
[myThread start]; 
上面的func1是要调用的函数的名称


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

如果可行,请尝试以下方法:

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

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

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

在使用
性能选择器:onThread:withObject:waituntldone:
实际运行某个线程之前,您需要正确创建一个线程

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

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

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

谢谢您的回复,但有时它需要主线程,我不想……我想知道您关于
performSelectorInBackground:withObject:
使用主线程的任何信息。Apple文档中说“此方法在应用程序中创建一个新线程,如果应用程序尚未进入多线程模式,则将其置于多线程模式。”如果您有信息显示有时它使用主线程,我很想看到它。很抱歉,此操作未在主线程上进行,因为在func1之后,“:”在那里,它没有运行,我以为它正在占用主线程。但是现在,当我删除“:”(根据这个问题的另一个答案)时,它工作得很好。感谢您的回复……据我所知,performSelectorInBackground:创建了一个低优先级线程。至少NSThread或detachNewThreadSelector:执行速度更快。无论何时使用任何类的任何对象,都不要忘记分配内存,就像第一种方法一样。
[self performSelectorInBackground:@selector(func1:) withObject:nil];