Junior — Middle
Ar įmanoma įgyvendinti mechanizmą, kuris stebi objektus naudodamas silpnus nuorodas, neleidžiant jų pašalinti šiukšlių surinkėjui?
sobes.tech AI
Atsakymas iš AI
Taip, iOS (ir Swift) yra silpnų nuorodų (weak references) mechanizmas, kuris leidžia stebėti objektus nesilaikant jų atmintyje ir užkertant kelią jų pašalinimui iš šiukšlių surinkėjo (ARC).
Silpna nuoroda nepadidina objekto nuorodų skaitiklio, todėl kai nėra jokių stiprių nuorodų, objektas išlaisvinamas iš atminties.
Swift pavyzdys, kaip naudoti silpną nuorodą:
class Person {
let name: String
init(name: String) {
self.name = name
}
}
class Apartment {
weak var tenant: Person? // silpna nuoroda
}
var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person
person = nil // Person objektas bus ištrintas, nes nėra stiprių nuorodų
print(apartment?.tenant) // nil
Taip, silpnos nuorodos leidžia stebėti objektus, nesukeliant jų pašalinimo kliūčių.