Middle
Kako se čuvaju prikazi koji su tip reference?
sobes.tech АИ
Одговор од АИ
Vidi (UIView i njegove podklase) u iOS su klase, a time i referentni tipovi. Čuvanje referenci na njih vrši se pomoću sledećih mehanizama:
-
Jake reference (Strong References):
- Podrazumevano, ako deklarujete svojstvo za UIView bez specifikatora
weakiliunowned, to stvara jaku referencu. - Jake reference povećavaju brojač referenci objekta. Objekat neće biti uklonjen iz memorije dok postoji bar jedna jaka referenca na njega.
- Ovo je standardni način čuvanja vidžeta, kada je potrebno da ostanu u memoriji i budu dostupni.
//Jake reference var myView: UIView = UIView() - Podrazumevano, ako deklarujete svojstvo za UIView bez specifikatora
-
Slabe reference (Weak References):
- Deklarišu se pomoću ključne reči
weak. - Slaba referenca ne povećava brojač referenci objekta.
- Slabe reference ne sprečavaju uklanjanje objekta iz memorije ako na njega ne ostaju jake reference.
- Koriste se za sprečavanje cikličnih referenci, tipična situacija je odnos roditelj-dete, gde roditelj ima jaku referencu na dete, a dete ponekad može imati referencu na roditelja. U tom slučaju, povratna referenca na roditelja treba biti slaba.
- Slabe reference mogu biti opcionalne (
Optional), jer objekat može biti uklonjen, a referenca će postatinil.
weak var parentView: UIView? - Deklarišu se pomoću ključne reči
-
Unowned reference (Unowned References):
- Deklarišu se pomoću ključne reči
unowned. - Kao i slabe reference, ne povećavaju brojač referenci.
- Razlika: u poređenju sa slabim referencama, unowned reference ne su opcionalne. Pretpostavlja se da će objekat živeti najmanje dok postoji referenca na njega. Ako pokušate da pristupite objektu putem unowned reference nakon što je oslobođen, aplikacija će se srušiti.
- Koriste se kada ste sigurni da životni ciklus reference ne premašuje životni ciklus objekta na koji ukazuje. U kontekstu vidžeta, ovo je manje uobičajeno nego
weak.
//Manje uobičajeno za vidžete, ali moguće unowned var childView: UIView - Deklarišu se pomoću ključne reči
-
Nizovi i kolekcije:
- Čuvanje referenci na vidžete u nizovima (
Array), rečnicima (Dictionary) ili skupovima (Set) takođe podrazumevano stvara jake reference na elemente kolekcije.
var subviews: [UIView] = [] - Čuvanje referenci na vidžete u nizovima (
Izbor između jake, slabe ili unowned reference zavisi od konkretnog scenarija korišćenja i upravljanja životnim ciklusom objekata, kako bi se sprečili curenja memorije. U SwiftUI, koncepti upravljanja životnim ciklusom vidžeta su nešto drugačiji, ali u kontekstu UIKit, ovi mehanizmi ostaju osnovni način čuvanja referenci.