Если вы сомневаетесь, вы можете сделать что-то вроде этого:
- (void) someCallback
{
if ([NSThread isMainThread] == NO) {
[self performSelectorOnMainThread: @selector(someCallback)];
}
}
Чтобы убедиться, что вы всегда выполняете методы обратного вызова в главном потоке и таким образом предотвращаете проблемы параллелизма.
Конечно, вы также можете использовать блок @synchronized
, но, по моему опыту, гораздо лучше полагаться на синхронный характер выполнения методов в основном потоке.