В каком потоке выполняются методы делегата iphone для обратных вызовов webview и основного местоположения? - PullRequest
1 голос
/ 04 марта 2010

У меня есть проблема, которая выглядит как состояние гонки с обратным вызовом веб-просмотра и обратным вызовом менеджера местоположения, которые взаимодействуют с теми же переменными и диалоговым окном предупреждения - диалоговое окно создается в обратном вызове местоположения и должно быть отклонено в обратном вызове веб-просмотра. Я думал, что обратные вызовы делегатов для стандартных объектов, таких как веб-просмотр и расположение ядра, будут выполняться в главном потоке - это не правильно?

1 Ответ

1 голос
/ 04 марта 2010

Если вы сомневаетесь, вы можете сделать что-то вроде этого:

- (void) someCallback
{
    if ([NSThread isMainThread] ==  NO) {
        [self performSelectorOnMainThread: @selector(someCallback)];
    }
}

Чтобы убедиться, что вы всегда выполняете методы обратного вызова в главном потоке и таким образом предотвращаете проблемы параллелизма.

Конечно, вы также можете использовать блок @synchronized, но, по моему опыту, гораздо лучше полагаться на синхронный характер выполнения методов в основном потоке.

...