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.
- A fila principal (
- 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).