Sobes.tech
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:

  1. Silné odkazy (Strong References):

    • Predvolene, ak deklarujete vlastnosť pre UIView bez špecifikátora weak alebo unowned, 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()
    
  2. 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 stane nil.
    weak var parentView: UIView?
    
  3. 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
    
  4. 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] = []
    

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.