如何在cocoa中的不同控制器中切换主线程和辅助线程

时间:2009-04-16 17:57:01

标签: cocoa-touch multithreading controller

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

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

如何返回主线程的进程?我知道我可以使用此代码从代理中执行此操作:

    [(id)[[UIApplication sharedApplication] delegate] performSelectorOnMainThread:@selector(addToEarthquakeList:) withObject:self.currentEarthquakeObject waitUntilDone:YES];

如果主线程在控制器中运行而不是像上面那样在委托中运行,我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:0)

你有正确的电话。 当你调用performSelectorOnMainThread:...时,你的请求在主线程的运行循环中排队, - 所以如果主线程在处理首先完成时在其他地方执行。一旦主线程代码返回到运行循环,就可以查看并调用后台线程的请求。

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

答案 1 :(得分:0)

你不能这样做:

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

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