Swift Academy · Aula

defer para Limpeza de Recursos

Feche arquivos e libere recursos de forma confiável.

Aula 3 de 413 etapas

defer para Limpeza de Recursos é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

O problema da limpeza

Recursos como arquivos, bloqueios ou conexões precisam ser liberados. Esquecer de liberá-los em algum caminho causa vazamentos.

func work() {
    print("acquire resource")
    print("use resource")
    print("release resource")
}
work()

O adiamento garante a liberação

Colocar a liberação em um defer garante que ela seja executada independentemente de como a função termine.

func work() {
    print("acquire resource")
    defer { print("release resource") }
    print("use resource")
}
work()

Simulando um identificador de arquivo

Aqui, uma estrutura simples representa a abertura e o fechamento. O defer garante que close seja sempre chamado.

struct File {
    let name: String
    func close() { print("closed", name) }
}
func readFile() {
    let f = File(name: "data.txt")
    defer { f.close() }
    print("reading", f.name)
}
readFile()

Aquisição e liberação de um bloqueio

Modele um bloqueio: adquira-o e, em seguida, adie a liberação para que a seção crítica seja sempre desbloqueada.

func critical() {
    print("lock acquired")
    defer { print("lock released") }
    print("critical section work")
}
critical()

Limpeza próxima da configuração

Manter a limpeza logo após a configuração torna a associação evidente e dificulta esquecê-la.

func session() {
    print("connect")
    defer { print("disconnect") }
    print("send request")
    print("receive response")
}
session()

Vários recursos

Com vários recursos, declare cada limpeza logo após sua configuração; a ordem LIFO os fecha corretamente.

func transaction() {
    print("open connection")
    defer { print("close connection") }
    print("begin transaction")
    defer { print("commit transaction") }
    print("run query")
}
transaction()

Redefinição do contador

Um adiamento pode restaurar o estado, como redefinir uma sinalização quando um escopo termina.

func tracked() {
    var active = true
    defer { active = false; print("active reset to", active) }
    print("active is", active)
}
tracked()

Evitando duplicação

Sem defer, seria necessário repetir a limpeza em cada caminho de saída. defer permite escrevê-la uma única vez.

func validate(_ ok: Bool) {
    print("start")
    defer { print("cleanup done once") }
    if !ok {
        print("invalid")
        return
    }
    print("valid")
}
validate(false)

Limpeza com valor calculado

Um adiamento pode fazer log de uma medição final, como a quantidade de itens processados.

func batch() {
    var processed = 0
    defer { print("processed", processed, "items") }
    for _ in 1...3 { processed += 1 }
}
batch()

Restauração temporária do estado

Utilize o adiamento para alterar temporariamente uma configuração e restaurá-la de forma confiável em seguida.

func withVerbose() {
    var verbose = false
    verbose = true
    defer { verbose = false; print("verbose restored:", verbose) }
    print("verbose during work:", verbose)
}
withVerbose()

Prática recomendada

Sempre que adquirir algo que precise ser liberado, registre a liberação com defer na linha imediatamente seguinte.

func handle() {
    print("acquire")
    defer { print("release") }
    print("process")
}
handle()

Verificação rápida

Teste o adiamento para limpeza.

Recapitulação

Registre a liberação de recursos com defer logo após a aquisição. A limpeza tem execução garantida em todos os caminhos de saída, mantém a desmontagem próxima da configuração e evita duplicar a limpeza entre os caminhos de retorno.

func work() {
    print("acquire")
    defer { print("release") }
    print("use")
}
work()
Grátis para começar

Aprenda Swift com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
122
Aulas
409

Perguntas Frequentes

A aula “defer para Limpeza de Recursos” é grátis?

Sim — o texto completo de “defer para Limpeza de Recursos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “defer para Limpeza de Recursos”?

Feche arquivos e libere recursos de forma confiável. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “defer para Limpeza de Recursos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Como funciona defer
  2. Ordenação de Vários Blocos defer
  3. defer para Limpeza de Recursos
  4. defer com Erros e Retornos Antecipados
← Voltar para Swift Academy