Junior — Middle
Este posibil să implementăm un mecanism care urmărește obiectele folosind referințe slabe, fără a împiedica eliminarea lor de către colectorul de gunoi?
sobes.tech AI
Răspuns de la AI
Da, pe iOS (și în Swift) există un mecanism de referințe slabe (weak references), care permite urmărirea obiectelor fără a le menține în memorie și prevenirea eliminării lor de către colectorul de gunoi (ARC).
O referință slabă nu crește contorul de referințe al obiectului, astfel încât atunci când nu mai există referințe puternice, obiectul este eliberat din memorie.
Exemplu de utilizare a unei referințe slabe în Swift:
class Person {
let name: String
init(name: String) {
self.name = name
}
}
class Apartment {
weak var tenant: Person? // referință slabă
}
var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person
person = nil // obiectul Person va fi eliminat, deoarece nu mai există referințe puternice
print(apartment?.tenant) // nil
Astfel, referințele slabe permit urmărirea obiectelor fără a împiedica eliminarea lor.