Sobes.tech
Junior — Middle

Milyen helyen a memóriában vagy milyen mechanizmusban kezelik azt a hivatkozást, amely nem növeli a hivatkozásszámlálót és nem tartja fenn a objektumot?

sobes.tech MI

Válasz az MI-től

iOS-ben, amikor az automatikus memória kezelés (ARC) működik, létezik a gyenge (weak) hivatkozások fogalma. Egy gyenge hivatkozás egy objektumra mutató hivatkozás, amely nem növeli a hivatkozásszámot (retain count), és nem tartja az objektumot a memóriában.

Ezek a hivatkozások általában egy ARC által kezelt speciális memória területen tárolt gyenge mutatók mechanizmusával valósulnak meg. Amikor arra az objektumra, amelyre a gyenge hivatkozás mutat, felszabadítják, a gyenge hivatkozás automatikusan nil-re állítódik, hogy elkerüljék a lógó mutatókat.

Így a gyenge hivatkozás nem befolyásolja az objektum életciklusát, és nem tartja azt a memóriában. Ez hasznos például a ciklikus hivatkozások megelőzésében, például egy delegált és a tulajdonos között.

Swift példában:

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

protocol PersonDelegate: AnyObject {
    func didUpdateName()
}

Itt a delegate gyenge hivatkozás, amely nem növeli a hivatkozásszámot, és nem tartja a delegált objektumot.