У меня есть метод, который в некоторых случаях изменяет пользовательский интерфейс.
Например:
-(void) myMethod {
if(someExpressionIsTrue) {
// make some UI changes
// ...
// show actionSheet for example
}
}
Иногда myMethod
вызывается из mainThread
иногда из некоторого other thread
.
Вот почему я хочу, чтобы эти изменения пользовательского интерфейса выполнялись, безусловно, в mainThread
.
Я изменил необходимую часть myMethod
следующим образом:
if(someExpressionIsTrue) {
dispatch_async(dispatch_get_main_queue(), ^{
// make some UI changes
// ...
// show actionSheet for example
});
}
Итак, вопросы:
- Безопасное и хорошее решение для вызова
dispatch_async(dispatch_get_main_queue()
в основном потоке? Это влияет на производительность? - Можно ли решить эту проблему другим лучшим способом? Я знаю, что могу проверить, является ли это основным потоком с использованием метода
[NSThread isMainThread]
и вызываетdispatch_async
только в случае другого потока, но он заставит меня создать еще один метод или блок с этими обновлениями пользовательского интерфейса.