Middle
Ako sa ukladajú pohľady, ktoré sú typom odkazu?
sobes.tech AI
Odpoveď od AI
Vzhľady (UIView a jeho podtriedy) v iOS sú triedy, teda odkazové typy. Ukladanie odkazov na ne sa vykonáva pomocou nasledujúcich mechanizmov:
-
Silné odkazy (Strong References):
- Predvolene, ak deklarujete vlastnosť pre UIView bez špecifikátora
weakalebounowned, vytvára to silný odkaz. - Silný odkaz zvyšuje čítač odkazov objektu. Objekt nebude odstránený z pamäti, kým na neho existuje aspoň jeden silný odkaz.
- Toto je štandardný spôsob ukladania vzhľadov, keď je požadované, aby zostali v pamäti a boli dostupné.
//Silný odkaz var myView: UIView = UIView() - Predvolene, ak deklarujete vlastnosť pre UIView bez špecifikátora
-
Slabé odkazy (Weak References):
- Deklarujú sa pomocou kľúčového slova
weak. - Slabý odkaz ne zvyšuje čítač odkazov objektu.
- Slabé odkazy ne zabraňujú odstráneniu objektu z pamäti, ak na ne nezostali žiadne silné odkazy.
- Používajú sa na prevenciu cyklov silných odkazov, typická situácia je vzťah rodič-dieťa, kde rodič má silný odkaz na dieťa, a dieťa môže mať odkaz na rodiča. V takom prípade by spätný odkaz na rodiča mal byť slabý.
- Slabé odkazy musia byť voliteľné (
Optional), pretože objekt môže byť odstránený a odkaz sa stanenil.
weak var parentView: UIView? - Deklarujú sa pomocou kľúčového slova
-
Unowned odkazy (Unowned References):
- Deklarujú sa pomocou kľúčového slova
unowned. - Rovnako ako slabé odkazy, ne zvyšujú čítač odkazov.
- Rozdiel: na rozdiel od slabých odkazov, unowned odkazy ne sú voliteľné. Predpokladá sa, že objekt bude žiť aspoň tak dlho, ako existuje odkaz na neho. Ak sa pokúsite pristúpiť k objektu pomocou unowned odkazu po jeho uvoľnení, aplikácia sa zrúti.
- Používajú sa, keď ste si istí, že životný cyklus odkazu ne presahuje životný cyklus objektu, na ktorý ukazuje. V kontexte vzhľadov je to menej bežné než
weak.
//Menej bežné pre vzhľady, ale možné unowned var childView: UIView - Deklarujú sa pomocou kľúčového slova
-
Poľia a kolekcie:
- Ukladanie odkazov na vzhľady v poliach (
Array), slovníkoch (Dictionary) alebo množinách (Set) tiež predvolene vytvára silné odkazy na prvky kolekcie.
var subviews: [UIView] = [] - Ukladanie odkazov na vzhľady v poliach (
Výber medzi silnou, slabou alebo unowned referenciou závisí od konkrétneho scenára použitia a správy životného cyklu objektov, aby sa predišlo únikom pamäte. V SwiftUI sú koncepty správy životného cyklu vzhľadov trochu odlišné, ale v kontexte UIKit tieto mechanizmy zostávajú hlavným spôsobom ukladania odkazov.