У меня есть метод, который в некоторых случаях делает изменения пользовательского интерфейса.dispatch_get_main_queue() в основной теме
Например:
-(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
только в случае другого потока, но он заставит меня создать еще один метод или блок с этими обновлениями пользовательского интерфейса.
Нет необходимости создавать блок или функцию anothet с помощью [NSThread isMainThread] в качестве кондоции. Вы можете рекурсивно перезвать исходную функцию на mainthread, если она вызывается из другого потока. Это всего лишь 2 строки кода и еще одна инструкция if. – ingaham