Sobes.tech
Junior

O que é GCD (Grand Central Dispatch) no contexto do desenvolvimento iOS?

sobes.tech IA

Resposta da IA

GCD (Grand Central Dispatch) é uma API de baixo nível da Apple para gerir operações paralelas e execução assíncrona de código em aplicações. Fornece um mecanismo para enviar tarefas para filas de execução, que são geridas pelo sistema.

Características principais:

  • Filas de tarefas (Dispatch Queues): estruturas FIFO às quais são adicionados blocos de código (closures) para execução.
    • Derivam de tipos concurrentes (paralelo) e sequenciais (serial).
    • Oferecem filas globais do sistema e permitem criar filas personalizadas.
  • Blocos (Blocks): unidades de trabalho enviadas às filas.
  • Gestão de threads: abstrai o desenvolvedor da gestão direta de threads, permitindo que o sistema distribua as tarefas de forma ótima pelos núcleos do processador disponíveis.
  • Prioridades: permite especificar prioridades para tarefas nas filas globais concorrentes.

Tipos de filas:

  • Serial (sequenciais): executam tarefas estritamente uma de cada vez, na ordem de adição. Garantem que apenas uma tarefa desta fila seja executada em qualquer momento.
    • A fila principal (DispatchQueue.main) é uma fila serial especial para atualizações de UI.
    • Filas serial personalizadas.
  • Concorrentes: podem executar várias tarefas simultaneamente (em paralelo), sem garantir a ordem de finalização.
    • Filas globais concorrentes do sistema com diferentes níveis de qualidade de serviço (QoS).
    • Filas concorrentes personalizadas.

Qualidade de serviço (QoS) para filas concorrentes globais:

Nível QoS Descrição Exemplos de uso
userInteractive Tarefas com as quais o utilizador interage ativamente. Animações, processamento de eventos UI.
userInitiated Tarefas iniciadas pelo utilizador que requerem resultado imediato. Carregamento de conteúdo ao clicar num botão.
utility Tarefas que demoram a ser concluídas e não requerem resultado imediato. Carregamento de dados, processamento de imagens em segundo plano.
background Tarefas em segundo plano, invisíveis para o utilizador. Atualização de cache, sincronização de dados.
unspecified Nível de QoS não especificado, o sistema determina-o automaticamente. API antiga ou tarefas de baixo nível do sistema.

Exemplo simples de uso:

// Executar tarefa em segundo plano (fila concorrente global)
DispatchQueue.global(qos: .userInitiated).async {
    // Executar operação de longa duração
    print("A realizar tarefa em segundo plano")

    // Voltar ao thread principal para atualizar a UI
    DispatchQueue.main.async {
        print("A atualizar a UI no thread principal")
    }
}

O GCD simplifica o trabalho com multitarefa e paralelismo, tornando o código mais legível e menos propenso a erros de condições de corrida em comparação com a gestão de threads de baixo nível (por exemplo, Thread).