Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Descubra como utilizar Grand Central Dispatch (GCD) para gerenciar concorrência em aplicativos iOS

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.


To share Download PDF