我知道我可以使用以下代码在cocoa touch中创建一个单独的线程:
[NSThread detachNewThreadSelector:@selector(getEarthquakeData) toTarget:self withObject:nil];
如何返回主线程的进程?我知道我可以使用此代码从代理中执行此操作:
[(id)[[UIApplication sharedApplication] delegate] performSelectorOnMainThread:@selector(addToEarthquakeList:) withObject:self.currentEarthquakeObject waitUntilDone:YES];
如果主线程在控制器中运行而不是像上面那样在委托中运行,我该怎么办?
谢谢!
答案 0 :(得分:0)
你有正确的电话。
当你调用performSelectorOnMainThread:...
时,你的请求在主线程的运行循环中排队, - 所以如果主线程在处理首先完成时在其他地方执行。一旦主线程代码返回到运行循环,就可以查看并调用后台线程的请求。
如果有其他事件排队等待运行循环处理,我不知道是什么决定了优先级 - 但总的来说,我认为即使是下一个执行的事情,你也不能依赖它。 这是你应该尝试将主线程顺序处理保持在最低限度的另一个原因(即,尽量不要在主线程上运行长序列 - 但这可能就是你首先使用后台线程的原因)。 / p>
答案 1 :(得分:0)
你不能这样做:
[controller performSelectorOnMainThread:@selector(addToEarthquakeList:) withObject:self.currentEarthquakeObject waitUntilDone:YES];
......还是我误解了你的问题? (我以为你问的是如何在主线程上运行一个控制器方法。)