Да, это так.Вы должны вернуться к выполнению цикла, чтобы обновить пользовательский интерфейс.Таким образом, лучше всего отобразить представление ожидания в основном потоке, отправить почту в фоновом потоке, а затем снова скрыть и удалить представление ожидания в основном потоке.Вы должны обновлять пользовательский интерфейс только из основного потока.Вы можете использовать executeSelectorInBackground и executeSelectorOnMainThread, чтобы сделать это простым способом без создания потоков вручную.Вы также можете использовать dispatch_async следующим образом:
//show waiting view
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//prepare mail here
dispatch_async(dispatch_get_main_queue(), ^{
//send mail
//hide waiting view
});
});