Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade
Grand Central Dispatch (GCD) é uma tecnologia poderosa desenvolvida pela Apple para facilitar a execução de tarefas de maneira concorrente em dispositivos iOS e macOS. A importância do GCD reside na sua capacidade de melhorar a performance e a responsividade dos aplicativos, ao permitir que múltiplas operações sejam executadas simultaneamente sem bloquear a interface do usuário.
GCD é essencial para qualquer desenvolvedor que deseja criar aplicativos eficientes e responsivos. Ele fornece uma API robusta para gerenciar filas de tarefas e executar código de forma assíncrona, simplificando a programação concorrente.
Exemplos:
1. Criando e Executando Tarefas Assíncronas:
import Foundation
// Criação de uma fila global
let queue = DispatchQueue.global(qos: .background)
// Execução de uma tarefa assíncrona
queue.async {
for i in 1\...5 {
print("Tarefa Assíncrona \(i)")
}
}
// Execução de uma tarefa na fila principal
DispatchQueue.main.async {
print("Esta tarefa é executada na fila principal.")
}
Neste exemplo, uma fila global de background é criada e uma tarefa assíncrona é executada nela. Em seguida, uma tarefa é executada na fila principal, que é a fila principal da interface do usuário.
2. Utilizando Dispatch Groups para Sincronização:
import Foundation
let group = DispatchGroup()
let queue1 = DispatchQueue.global(qos: .userInitiated)
let queue2 = DispatchQueue.global(qos: .utility)
group.enter()
queue1\.async {
for i in 1\...5 {
print("Tarefa 1 - \(i)")
}
group.leave()
}
group.enter()
queue2\.async {
for i in 1\...5 {
print("Tarefa 2 - \(i)")
}
group.leave()
}
group.notify(queue: DispatchQueue.main) {
print("Todas as tarefas foram concluídas.")
}
Neste exemplo, utilizamos DispatchGroup
para sincronizar a execução de duas filas diferentes. As tarefas nas filas queue1
e queue2
são executadas em paralelo, e o bloco de código dentro de group.notify
é executado apenas após ambas as tarefas serem concluídas.
3. Usando Dispatch Semaphore para Controle de Concorrência:
import Foundation
let semaphore = DispatchSemaphore(value: 1)
let queue = DispatchQueue.global(qos: .default)
for i in 1\...5 {
queue.async {
semaphore.wait()
print("Tarefa \(i) iniciada")
sleep(2) // Simulando uma tarefa longa
print("Tarefa \(i) concluída")
semaphore.signal()
}
}
Neste exemplo, utilizamos DispatchSemaphore
para limitar o número de tarefas que podem ser executadas simultaneamente. O valor inicial do semáforo é 1, o que significa que apenas uma tarefa pode ser executada de cada vez. As outras tarefas esperam até que o semáforo seja liberado.