Junior — Middle
Vai jūs varat izskaidrot vājo atsauču iekšējo realizāciju un kā tās darbojas atmiņā?
sobes.tech AI
Atbilde no AI
Vāji saites (weak references) iOS (un vispār Objective-C/Swift) ir atsauces uz objektus, kas nepalielina atsauces skaitītāju (retain count). Tas nozīmē, ka, ja nav stipru atsauču uz objektu, tas var tikt atbrīvots no atmiņas, pat ja ir vāji atsauces.
Iekšējā realizācija:
- Vāja atsauce glabā norādi uz objektu, bet to neuztur atmiņā.
- Kad objekts, uz kuru norāda vāja atsauce, tiek dzēsts, vāja atsauce automātiski tiek iestatīta uz nil, lai izvairītos no karājēniem norādītājiem.
Tas darbojas pateicoties ARC (Automatic Reference Counting) mehānismam, kas seko stiprajām atsaucēm un paziņo par vājām atsaucēm, kad objekts tiek atbrīvots.
Swift piemērs:
class Person {
var name: String
init(name: String) { self.name = name }
}
class Apartment {
weak var tenant: Person? // vāja atsauce
}
var person: Person? = Person(name: "Alex")
var apartment = Apartment()
apartment.tenant = person
person = nil // Person objekts tiek atbrīvots, apartment.tenant automātiski kļūst par nil