Каждый раз, когда я вызываю вызов API на свой сервер для получения данных, я уже знаю, что для выполнения команд изменения интерфейса я должен использовать следующий блок, потому что мой API-вызов выполняется в фоновом режиме:iOS - когда вызывать пользовательский интерфейс Изменение функций в главной теме
dispatch_async(dispatch_get_main_queue(), ^{
//do UI stuff
});
Однако, если у меня есть функция, которая меняет пользовательский интерфейс вне блока вызова API? Например:
-(void)doALotOfUIChanging
{
//do a lot of UI changing
}
В моем блоке вызова API, нужно ли мне позвонить, что UI изменения функции в главном потоке, как так ?:
[apiObject getDataFromObject:my.Object successCallback:^(Array *data)
{
dispatch_async(dispatch_get_main_queue(), ^{
[self doALotOfUIChanging];
});
}
errorCallback:^(NSString *error)
{
NSLog(@"%@", error);
}];
Или я не должен называть его в основной поток, так как функция уже вне блока API вызова, как так ?:
[apiObject getDataFromObject:my.Object successCallback:^(Array *data)
{
[self doALotOfUIChanging];
}
errorCallback:^(NSString *error)
{
NSLog(@"%@", error);
}];
у меня также есть функции, которые выполняют перетекает на другие контроллеры просмотра, поэтому я также интересно, если я должен назвать их в основной threa d также. Я делаю очистку кода, и я не хочу постоянно переписывать функцию dispatch_async в ситуациях, которые мне могут не понадобиться, поэтому любая помощь или совет будут очень признательны. Благодарю.
Спасибо. Включает ли это также настройку наблюдателей для «NSNotificationCenter», если функции, которые будут выполняться позже, изменят интерфейс? – Rafi
Как правило, селектор NSNotification запускается в потоке, на котором они отправляются, если вы не используете « - addObserverForName: object: queue: usingBlock:». – gagarwal
Oooooh ok, это здорово знать. Потому что я добавляю наблюдателей для уведомлений с помощью «useBlock». Использование отправки для запуска в главной очереди будет иметь такое же влияние, что и «useBlock»? – Rafi