Sobes.tech
Junior — Middle

Em que lugar na memória ou em que mecanismo é que a referência, que não aumenta o contador de referências e não provoca a retenção do objeto, é gerida?

sobes.tech IA

Resposta da IA

No iOS, ao usar a gestão automática de memória (ARC), existe o conceito de referências fracas (weak). Uma referência fraca é uma referência a um objeto que não aumenta o contador de referências (retain count) e não mantém o objeto na memória.

Estas referências geralmente são implementadas através de um mecanismo de ponteiros fracos, que são armazenados numa área de memória gerida pelo sistema ARC. Quando o objeto ao qual a referência fraca aponta é libertado, a referência fraca é automaticamente definida como nil para evitar ponteiros pendurados.

Assim, uma referência fraca não afeta o ciclo de vida do objeto e não o mantém na memória. Isto é útil para evitar referências cíclicas, por exemplo, entre um delegado e o seu proprietário.

Exemplo em Swift:

class Person {
    var name: String
    weak var delegate: PersonDelegate?
    init(name: String) {
        self.name = name
    }
}

protocol PersonDelegate: AnyObject {
    func didUpdateName()
}

Aqui, delegate é uma referência fraca que não aumenta o contador de referências e não mantém o objeto delegado.