Sobes.tech
Junior — Middle

Mi a különbség a Strong és Weak típusú hivatkozások között a memória kezelésében és a hivatkozási modellben?

sobes.tech MI

Válasz az MI-től

Strong- hivatkozás — ez egy normál erős hivatkozás egy objektumra, amely növeli ennek az objektumnak a hivatkozásszámát (retain count). Amíg legalább egy erős hivatkozás létezik, az objektum nem kerül törlésre a memóriából.

Weak-hivatkozás — ez egy gyenge hivatkozás, amely nem növeli az objektum hivatkozásszámát. Ezt a ciklikus hivatkozások (retain cycles) elkerülésére használják. Ha a weak-hivatkozással hivatkozott objektum törlésre kerül, a weak-hivatkozás automatikusan nil lesz.

Példa Swift-ben:

class Person {
    var name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let unit: String
    weak var tenant: Person?  // weak hivatkozás a ciklus elkerülése érdekében
    init(unit: String) { self.unit = unit }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john  // weak-hivatkozás

Itt a weak-hivatkozás tenant nem tartja fenn a Person objektumot, így elkerülhető a memória szivárgás.