Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Cocoa touch 如何在cocoa中不同控制器内的主线程和次线程之间切换_Cocoa Touch_Multithreading_Controller - Fatal编程技术网

Cocoa touch 如何在cocoa中不同控制器内的主线程和次线程之间切换

Cocoa touch 如何在cocoa中不同控制器内的主线程和次线程之间切换,cocoa-touch,multithreading,controller,Cocoa Touch,Multithreading,Controller,我知道我可以使用以下代码在cocoa touch中创建单独的线程: [NSThread detachNewThreadSelector:@selector(getEarthquakeData) toTarget:self withObject:nil]; 如何返回到主线程的进程?我知道我可以通过以下代码从代表处执行此操作: [(id)[[UIApplication sharedApplication] delegate] performSelectorOnMainThre

我知道我可以使用以下代码在cocoa touch中创建单独的线程:

       [NSThread detachNewThreadSelector:@selector(getEarthquakeData) toTarget:self withObject:nil];
如何返回到主线程的进程?我知道我可以通过以下代码从代表处执行此操作:

    [(id)[[UIApplication sharedApplication] delegate] performSelectorOnMainThread:@selector(addToEarthquakeList:) withObject:self.currentEarthquakeObject waitUntilDone:YES];
如果主线程在控制器中运行,而不是像上面那样在委托中运行,我将如何执行上述操作

谢谢

你的电话打对了。 当调用
performselectornmainthread:…
时,您的请求将在主线程的运行循环中排队,-因此如果主线程在处理首先完成时正在其他地方执行。一旦主线程代码返回到运行循环,就可以查看并调用来自后台线程的请求

如果有其他事件排队等待运行循环处理,我不知道是什么决定了优先级——但总的来说,我认为即使是下一个执行的事件,您也不能依赖它。 这是您应该尝试将主线程顺序处理降至最低的另一个原因(即,尽量不要在主线程上有长时间运行的序列-但这可能就是您首先使用后台线程的原因)。

您不能这样做:

[controller performSelectorOnMainThread:@selector(addToEarthquakeList:) withObject:self.currentEarthquakeObject waitUntilDone:YES];

…还是我误解了你的问题?(我以为您在问如何在主线程上运行控制器方法。)

如何获得该控制器?如果实例化一个新的控制器,我会用上面的代码得到警告:warning receiver是一个forward类,相应的@interface可能不存在,所以我应该实例化吗?或者如何让该控制器执行SelectorOnMainThread?要调用的方法是什么?您需要有一个对该对象的引用可供您的后台线程使用——要么传入该对象,要么将其作为(可锁定或原子)属性或您可以访问的其他对象to@Joe,我想也许“self”是你感兴趣的控制器对象。