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.