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

  1. Jake reference (Strong References):

    • Podrazumevano, ako deklarujete svojstvo za UIView bez specifikatora weak ili unowned, 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()
    
  2. 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 postati nil.
    weak var parentView: UIView?
    
  3. 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
    
  4. 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] = []
    

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.