0Pricing
Swift Academy · Aula

Desinicializadores e ciclo de vida da memória

Use deinit para liberar recursos antes de um objeto ser desalocado.

Desinicializadores e ciclo de vida da memória é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 4 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.

Boas-vindas

As classes do Swift podem definir um `deinit` que é executado imediatamente antes de a instância ser desalocada. Entender todo o ciclo de vida do objeto — inicialização → uso → `deinit` — é essencial para gerenciar recursos.

O que é a desinicialização?

```swift class FileHandle { let path: String init(path: String) { self.path = path; print("Opened \(path)") } deinit { print("Closed \(path)") } } do { let f = FileHandle(path: "/tmp/log.txt") } // deinit called here when f goes out of scope ```

Regras de sintaxe da desinicialização

• Somente classes — estruturas e enumerações não têm `deinit` • Sem parâmetros ou valor de retorno • Sem parênteses: `deinit { }`, não `deinit() { }` • Chamado automaticamente pelo ARC — nunca o chame diretamente • O `deinit` da superclasse é chamado automaticamente depois do `deinit` da subclasse

Casos de uso para limpeza

Usos comuns de `deinit`: • Fechar conexões de rede • Remover observadores de notificações: `NotificationCenter.default.removeObserver(self)` • Invalidar temporizadores • Fechar identificadores de arquivo ou conexões de banco de dados

Contagem de retenção e ciclo de vida

O ARC acompanha quantas referências fortes apontam para um objeto: ```swift var a: Dog? = Dog() // retain count = 1 var b = a // retain count = 2 a = nil // retain count = 1 b = nil // retain count = 0 → deinit called ```

Cadeia de desinicialização de subclasses

```swift class Base { deinit { print("Base deinit") } } class Child: Base { deinit { print("Child deinit") } // super.deinit called automatically after } var c: Child? = Child() c = nil // prints: Child deinit, then Base deinit ```

Referência fraca evita retenção

```swift class Owner { var pet: Dog? deinit { print("Owner gone") } } class Dog { weak var owner: Owner? // weak = no strong retain deinit { print("Dog gone") } } ``` Quando `owner` recebe nil, `Owner` pode ser desalocado mesmo que `Dog` mantenha uma referência.

Ciclos de retenção impedem a desinicialização

```swift class A { var b: B? } class B { var a: A? } var a: A? = A() var b: B? = B() a?.b = b b?.a = a a = nil b = nil // deinit never called — retain cycle! ```

Padrão de invalidação de temporizador

```swift class PollingService { var timer: Timer? func start() { timer = Timer.scheduledTimer(...) } deinit { timer?.invalidate() timer = nil print("Timer stopped") } } ```

Detecção de vazamentos

Se `deinit` nunca for chamado, provavelmente há um ciclo de retenção. Use as ferramentas do Xcode e o modelo de vazamentos para detectar objetos que foram alocados, mas nunca desalocados.

Verificação rápida

Quais tipos podem definir uma desinicialização?

Recapitulação

Principais conclusões: • `deinit { }` — limpa recursos antes da desalocação • Somente classes; o `deinit` da superclasse é chamado automaticamente depois do da subclasse • O ARC determina quando `deinit` é executado (quando a contagem de retenção chega a 0) • Ciclos de retenção impedem `deinit` — desfaça-os com `weak`/`unowned` • Use as ferramentas de detecção de vazamentos para encontrar objetos cujo `deinit` nunca é executado Curso concluído! Próximo: padrões de enumeração e máquinas de estado.

Perguntas Frequentes

A aula “Desinicializadores e ciclo de vida da memória” é grátis?

Sim — o texto completo de “Desinicializadores e ciclo de vida da memória” é 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 “Desinicializadores e ciclo de vida da memória”?

Use deinit para liberar recursos antes de um objeto ser desalocado. 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 4 de 4.

Quanto tempo leva a aula “Desinicializadores e ciclo de vida da memória”?

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. Herança de classes e a palavra-chave super
  2. override, final e prevenção de subclasses
  3. Conversão de tipos: is, as?, as! e as
  4. Desinicializadores e ciclo de vida da memória
← Voltar para Swift Academy