Sobes.tech
Junior — Middle

Je možné implementovať mechanizmus, ktorý sleduje objekty pomocou slabých odkazov, bez toho, aby zabránil ich odstráneniu zberačom odpadkov?

sobes.tech AI

Odpoveď od AI

Áno, na iOS (a v Swift) existuje mechanizmus slabých odkazov (weak references), ktorý umožňuje sledovať objekty bez ich udržiavania v pamäti a zabraňuje ich odstráneniu zberateľom odpadu (ARC).

Slabý odkaz nezvyšuje čítač odkazov objektu, takže keď nezostanú žiadne silné odkazy, objekt je uvoľnený z pamäti.

Príklad použitia slabého odkazu v Swift:

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

class Apartment {
    weak var tenant: Person?  // slabý odkaz
}

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

person = nil  // objekt Person bude odstránený, pretože nie sú žiadne silné odkazy

print(apartment?.tenant)  // nil

Týmto spôsobom umožňujú slabé odkazy sledovať objekty, bez toho, aby bránili ich odstráneniu.