Sobes.tech
Junior — Middle

Lehetséges olyan mechanizmust megvalósítani, amely gyenge hivatkozások segítségével követi az objektumokat anélkül, hogy megakadályozná azok törlését a szemétgyűjtő által?

sobes.tech MI

Válasz az MI-től

Igen, az iOS-ben (és Swiftben) létezik gyenge hivatkozások (weak references) mechanizmusa, amely lehetővé teszi az objektumok nyomon követését anélkül, hogy azokat a memóriában tartaná, és megakadályozza azok törlését a szemétgyűjtő (ARC) által.

Egy gyenge hivatkozás nem növeli az objektum referencia számlálóját, így amikor már nincsenek erős hivatkozások, az objektum felszabadul a memóriából.

Swiftben a gyenge hivatkozás használatának példája:

class Person {
    let name: String
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    weak var tenant: Person?  // gyenge hivatkozás
}

var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person

person = nil  // a Person objektum törlődik, mivel nincsenek erős hivatkozások

print(apartment?.tenant)  // nil

Így a gyenge hivatkozások lehetővé teszik az objektumok nyomon követését anélkül, hogy akadályoznák azok törlését.