Junior — Middle
Czy możliwe jest zaimplementowanie mechanizmu, który śledzi obiekty za pomocą słabych referencji, nie uniemożliwiając ich usunięcia przez zbieracz śmieci?
sobes.tech AI
Odpowiedź od AI
Tak, na iOS (i w Swift) istnieje mechanizm słabych odniesień (weak references), który pozwala śledzić obiekty bez ich utrzymywania w pamięci i zapobiega ich usunięciu przez zbieracz śmieci (ARC).
Słabe odniesienie nie zwiększa licznika odniesień obiektu, więc gdy nie pozostają żadne silne odniesienia, obiekt jest zwalniany z pamięci.
Przykład użycia słabego odniesienia w Swift:
class Person {
let name: String
init(name: String) {
self.name = name
}
}
class Apartment {
weak var tenant: Person? // słabe odniesienie
}
var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person
person = nil // obiekt Person zostanie usunięty, ponieważ nie ma silnych odniesień
print(apartment?.tenant) // nil
W ten sposób słabe odniesienia pozwalają śledzić obiekty, nie przeszkadzając w ich usunięciu.