Junior
Čo je weak modifikátor pamäte v Swift?
sobes.tech AI
Odpoveď od AI
Modifikátor weak sa využíva na prerušovanie cyklov silných odkazov medzi objektmi, keď jeden objekt má silnú referenciu na iný, a tento má zase silnú referenciu späť.
Hlavné vlastnosti weak:
- Nezvyšuje počet odkazov: Použitie
weaknezvyšuje počet silných odkazov na objekt. - Môže byť
nil: Slabá referencia je voliteľná (Optional) a automaticky sa stávanil, keď je objekt, na ktorý odkazuje, deinitializovaný. - Používa sa pre vzťahy rodič/dieťa: Často sa aplikuje, keď má dieťa objekt odkaz na svojho rodiča, aby sa predišlo cyklom silných odkazov.
- Musí byť deklarovaná ako
var: Pretože slabá referencia môže byťnil, musí byť premenná (var), nie konštanta (let).
Príklad použitia:
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
print("\(name) sa inicializuje")
}
deinit {
print("\(name) sa deinitializuje")
}
}
class Apartment {
let unit: String
weak var tenant: Person? // Slabá referencia
init(unit: String) {
self.unit = unit
print("Byt \(unit) sa inicializuje")
}
deinit {
print("Byt \(unit) sa deinitializuje")
}
}
Bez weak var tenant: Person? v triede Apartment, by vznikol cyklus silných odkazov, a inštancie Person a Apartment by neboli deinitializované, keď na ne už neukazujú žiadne iné silné odkazy. Vďaka weak sa pri deinitializácii inštancie Person, referencia tenant v inštancii Apartment automaticky stáva nil.