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.