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