Sobes.tech
Middle

Kuidas salvestatakse vaated, mis on viidetüüp?

sobes.tech AI

Vastus AI-lt

Vaadid (UIView ja selle alamklassid) iOS-is on klassid, seega viitamüübid. Nende viitamüügi säilitamine toimub järgmiste mehhanismide abil:

  1. Tugevad viitamüügid (Strong References):

    • Vaikimisi, kui deklareerite omaduse UIView jaoks ilma weak või unowned märgistuseta, see loob tugeva viitamüügi.
    • Tugev viitamüük suurendab objekti viitamüügikogust. Objekt ei eemaldata mälust, kuni sellel on vähemalt üks tugev viitamüük.
    • See on standardne viis vaadete salvestamiseks, kui on vaja, et need jääksid mällu ja oleksid kättesaadavad.
    //Tugev viitamüük
    var myView: UIView = UIView()
    
  2. Nõrgad viitamüügid (Weak References):

    • Deklareerivad weak märksõnaga.
    • Nõrk viitamüük ei suurenda objekti viitamüügikogust.
    • Nõrgad viitamüügid ei takista objekti eemaldamist mälust, kui sellele ei ole teisi tugevaid viitamüüke.
    • Kasutatakse tugevate viitamüükide tsüklite vältimiseks, tüüpiline olukord on vanem-laps suhe, kus vanem omab tugevat viitamüük lapsele, ja laps võib mõnikord omada viitamüük vanemale. Sellisel juhul peaks tagasiviide vanemale olema nõrk.
    • Nõrgad viitamüük peavad olema valikulised (Optional), kuna objekt võib eemaldada ja viitamüük muutub nil-ks.
    weak var parentView: UIView?
    
  3. Unowned viitamüük (Unowned References):

    • Deklareerivad unowned märksõnaga.
    • Nagu nõrgad viitamüük, ei suurenda need viitamüügikogust.
    • Erinevus: võrreldes nõrkade viitamüükidega, unowned viitamüük ei ole valikulised. Eeldatakse, et objekt elab vähemalt nii kaua, kui sellele viidatakse. Kui proovite sellele viidata pärast objekti vabastamist, programm kukub.
    • Kasutatakse, kui olete kindel, et viidatud objekti elutsükkel ei ületa selle objekti elutsüklit, millele see viitab. UIKit kontekstis on see vähem levinud kui weak.
    //Vähem levinud vaadete puhul, kuid võimalik
    unowned var childView: UIView
    
  4. Massiivid ja kogumid:

    • Vaadete viitamiste salvestamine massiivides (Array), sõnaraamatutes (Dictionary) või kogumites (Set) samuti loob vaikimisi tugevad viitamised elementidele.
    var subviews: [UIView] = []
    

Valik tugeva, nõrga või unowned viitamise vahel sõltub konkreetsest kasutusstsenaariumist ja objektide elutsükli haldamisest, et vältida mälulekkeid. SwiftUI kontekstis on elutsükli haldamise kontseptsioonid veidi erinevad, kuid need mehhanismid jäävad peamiseks viisi viitamiste säilitamiseks.