Junior — Middle
Je možné implementovat mechanismus, který sleduje objekty pomocí slabých odkazů, aniž by zabránil jejich odstranění garbage collectorem?
sobes.tech AI
Odpověď od AI
Ano, v iOS (a Swiftu) existuje mechanismus slabých odkazů (weak references), který umožňuje sledovat objekty bez jejich udržování v paměti a zabránit jejich odstranění garbage collectorem (ARC).
Slabý odkaz nezvyšuje čítač odkazů objektu, takže když nezůstanou žádné silné odkazy, objekt je uvolněn z paměti.
Příklad použití slabého odkazu ve Swiftu:
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 odstraněn, protože nejsou žádné silné odkazy
print(apartment?.tenant) // nil
Tímto způsobem umožňují slabé odkazy sledovat objekty, aniž by bránily jejich odstranění.