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