defer para Limpeza de Recursos
Feche arquivos e libere recursos de forma confiável.
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()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
- Como funciona defer
- Ordenação de Vários Blocos defer
- defer para Limpeza de Recursos
- defer com Erros e Retornos Antecipados