Junior — Middle
Como organizar corretamente os links no modelo de objetos para evitar ciclos de retenção de memória?
sobes.tech IA
Resposta da IA
Para evitar ciclos de retenção de memória no modelo de objetos no iOS (usando Swift ou Objective-C), é importante usar corretamente referências fortes (strong), fracas (weak) e sem proprietário (unowned).
Ideia principal:
- strong — referência que possui, aumenta o contador de referências do objeto.
- weak — referência que não possui, não aumenta o contador, é automaticamente definida como nil quando o objeto é removido.
- unowned — referência que não possui, não aumenta o contador, mas não é definida como nil, usada quando se garante que o objeto vive mais tempo.
Frequentemente, ciclos ocorrem, por exemplo, entre um pai e um filho ou entre um delegado e um objeto. Para evitar ciclos:
- O pai mantém o filho através de strong.
- O filho referencia o pai através de weak ou unowned.
Exemplo em Swift:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // referência fraca para evitar ciclo
}
let parent = Parent()
let child = Child()
parent.child = child
child.parent = parent
Assim, quando parent e child deixam de ser usados, a memória é liberada corretamente, sem vazamentos devido a ciclos.