Swift Academy · Aula

Ciclos de retenção: causas e detecção

Identifique ciclos de retenção entre objetos e closures usando o Instruments.

Aula 2 de 412 etapas

Ciclos de retenção: causas e detecção é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 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

Um ciclo de retenção ocorre quando dois ou mais objetos mantêm referências fortes uns aos outros, impedindo que o ARC chegue a uma contagem zero — o que causa um vazamento de memória.

Ciclo Simples entre Dois Objetos

```swift class Owner { var pet: Pet? } class Pet { var owner: Owner? } var o: Owner? = Owner() var p: Pet? = Pet() o?.pet = p // Owner → Pet (strong) p?.owner = o // Pet → Owner (strong) o = nil; p = nil // Neither deinit called — cycle! ```

Ciclo entre Pai e Filho

```swift class Node { var children: [Node] = [] var parent: Node? // strong → cycle with parent } let root = Node() let child = Node() root.children.append(child) child.parent = root // cycle ```

Ciclo de Captura por Fechamento

```swift class ViewController { var onComplete: (() -> Void)? func setup() { onComplete = { // closure strongly captures self self.doWork() // ← cycle! } } } ```

Ciclo do Padrão Delegado

```swift protocol TaskDelegate: AnyObject { func didFinish() } class Task { var delegate: TaskDelegate? // if strong → potential cycle } class Manager: TaskDelegate { var task = Task() init() { task.delegate = self } // Manager → Task → Manager } ```

Detectando com o Instruments

Use Xcode Instruments → Vazamentos: 1. Execute o aplicativo no Instruments 2. Clique no instrumento Vazamentos 3. As marcações vermelhas indicam objetos vazados 4. Explore os detalhes para ver o grafo de referências Como alternativa, defina `deinit { print(...) }` e verifique se ele é executado.

Detectando com o Grafo de Memória do Xcode

No depurador do Xcode: Depurar > Depurador do Grafo de Memória. Clique em um objeto vazado para ver sua cadeia de referências — o ciclo ficará visível como um circuito fechado no grafo.

Padrões Comuns de Ciclos

• Delegado armazenando outro delegado com uma referência forte • Fechamento capturando `self` com uma referência forte • Referências fortes bidirecionais entre pai e filho • Observador do NotificationCenter mantendo um fechamento que captura `self` • O alvo do temporizador é `self` (forte)

Ciclo de Retenção de Temporizador

```swift class Poller { var timer: Timer? func start() { timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] _ in self?.poll() // weak self breaks cycle } } deinit { timer?.invalidate() } } ```

Ciclo de retenção do NotificationCenter

```swift class Listener { var token: NSObjectProtocol? init() { token = NotificationCenter.default.addObserver(forName: .UIApplicationDidBecomeActive, object: nil, queue: .main) { [weak self] _ in self?.refresh() } } deinit { NotificationCenter.default.removeObserver(token!) } } ```

Verificação rápida

O que é um ciclo de retenção no ARC?

Recapitulação

Principais conclusões: • Ciclos de retenção: referências fortes mútuas → nenhum objeto é desalocado • Comuns em: delegados, fechamentos e vínculos bidirecionais entre pai e filho • Detecte com o Leaks do Instruments ou o Depurador de Gráfico de Memória do Xcode • Corrija com referências `weak` ou `unowned` • Temporizadores e NotificationCenter também causam ciclos — interrompa-os com `[weak self]` Próximo: referências weak e unowned.
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 “Ciclos de retenção: causas e detecção” é grátis?

Sim — o texto completo de “Ciclos de retenção: causas e detecção” é 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 “Ciclos de retenção: causas e detecção”?

Identifique ciclos de retenção entre objetos e closures usando o Instruments. 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 2 de 4.

Quanto tempo leva a aula “Ciclos de retenção: causas e detecção”?

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 o ARC conta referências
  2. Ciclos de retenção: causas e detecção
  3. Referências weak e unowned
  4. Listas de captura de closures e [weak self]
← Voltar para Swift Academy