Junior — Middle
Da li je moguće implementirati mehanizam koji prati objekte pomoću slabih referenci, a da pritom ne spreči njihovo uklanjanje od strane sakupljača smeća?
sobes.tech АИ
Одговор од АИ
Da, na iOS (i u Swift-u) postoji mehanizam slabih referenci (weak references), koji omogućava praćenje objekata bez njihovog držanja u memoriji i sprečava njihovo uklanjanje od strane sakupljača smeća (ARC).
Slaba referenca ne povećava brojač referenci objekta, pa kada ne ostanu jake reference, objekat se oslobađa iz memorije.
Primer korišćenja slabe reference u Swift-u:
class Person {
let name: String
init(name: String) {
self.name = name
}
}
class Apartment {
weak var tenant: Person? // slaba referenca
}
var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person
person = nil // objekat Person će biti uklonjen, jer nema jakih referenci
print(apartment?.tenant) // nil
Na ovaj način, slabe reference omogućavaju praćenje objekata, ne ometajući njihovo uklanjanje.