【发布时间】:2010-03-03 22:28:11
【问题描述】:
我有一个问题,看起来像是一个竞争条件,其中包含一个 webview 回调和一个位置管理器回调,它们与相同的变量和一个警报对话框交互 - 该对话框是在位置回调中创建的,应该在 webview 回调中关闭。我认为标准对象(如 webview 和核心位置)的委托回调将在主线程中运行 - 这不正确吗?
【问题讨论】:
标签: iphone uiwebview thread-safety delegates core-location
我有一个问题,看起来像是一个竞争条件,其中包含一个 webview 回调和一个位置管理器回调,它们与相同的变量和一个警报对话框交互 - 该对话框是在位置回调中创建的,应该在 webview 回调中关闭。我认为标准对象(如 webview 和核心位置)的委托回调将在主线程中运行 - 这不正确吗?
【问题讨论】:
标签: iphone uiwebview thread-safety delegates core-location
如果有疑问,您可以这样做:
- (void) someCallback
{
if ([NSThread isMainThread] == NO) {
[self performSelectorOnMainThread: @selector(someCallback)];
}
}
确保您始终在主线程上执行回调方法,从而防止并发问题。
当然,您也可以使用@synchronized 块,但根据我的经验,最好依靠在主线程上执行方法的同步特性。
【讨论】: