Executar MBProgressHUD em outro segmento?

Eu estou usando MBProgressHUD para exibir uma animação “ocupado” para usar o usuário enquanto um UITableView está sendo preenchido. O UITableView bloqueia o thread principal para que a animação não apareça até que a tabela termine de carregar.

Existe uma maneira de fazer a animação ocupada executar em outro segmento enquanto o UITableView ocupa o thread principal?

O UIKit faz seu desenho quando o loop de execução completa o ciclo atual. Em outras palavras, se você estiver configurando uma visualização (por exemplo, MBProgressHUD), as alterações não serão visíveis até a próxima iteração do loop de execução. Portanto, se você não permitir que o loop de execução gire bloqueando o thread principal, as alterações da interface do usuário não aparecerão imediatamente.

Se você não puder fazer o seu trabalho em um thread de segundo plano, você precisa permitir que o loop de execução complete seu ciclo antes de iniciar sua tarefa de bloqueio de longa duração no thread principal.

Você pode fazer isso agendando a execução na próxima iteração do loop de execução.

 // Setup and show HUD here [self performSelector:@selector(myTask) withObject:nil afterDelay:0.001]; 

Esconda o HUD no final do myTask. Ou você pode executar o loop de execução manualmente.

 // Setup and show HUD here [[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]]; // Insert myTask code here // Hide the shown HUD here 

Ou (se você pode usar blocos)

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){ // Insert myTask code here });