Junior — Middle
Vai ir iespējams īstenot mehānismu, kas seko objektiem, izmantojot vājas atsauces, neapturot to noņemšanu no atkritumu savācēja?
sobes.tech AI
Atbilde no AI
Jā, iOS (un Swift) ir mehānisms ar vājiem norādījumiem (weak references), kas ļauj izsekot objektus, neuzturot tos atmiņā un novēršot to dzēšanu no atkritumu savācēja (ARC).
Vājš norādījums nepalielina objekta norāžu skaitītāju, tāpēc, kad vairs nav stipru norāžu, objekts tiek atbrīvots no atmiņas.
Swift piemērs, kā izmantot vājo norādi:
class Person {
let name: String
init(name: String) {
self.name = name
}
}
class Apartment {
weak var tenant: Person? // vājš norādījums
}
var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person
person = nil // Person objekts tiks dzēsts, jo nav stipru norāžu
print(apartment?.tenant) // nil
Tādējādi, vājas norādes ļauj izsekot objektus, neapgrūtinot to dzēšanu.