Sobes.tech
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.