0

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

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

如何回到我的主线程的进程?我知道我可以使用以下代码从代表处执行此操作:

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

如果主线程在控制器中运行而不是在上面的委托中运行,我将如何执行上述操作。

谢谢!

4

2 回答 2

0

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

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

于 2009-04-16T19:02:02.347 回答
0

你不能这样做:

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

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

于 2009-04-16T19:21:24.780 回答