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:
-
Tugevad viitamüügid (Strong References):
- Vaikimisi, kui deklareerite omaduse UIView jaoks ilma
weakvõiunownedmä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() - Vaikimisi, kui deklareerite omaduse UIView jaoks ilma
-
Nõrgad viitamüügid (Weak References):
- Deklareerivad
weakmä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 muutubnil-ks.
weak var parentView: UIView? - Deklareerivad
-
Unowned viitamüük (Unowned References):
- Deklareerivad
unownedmä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 - Deklareerivad
-
Massiivid ja kogumid:
- Vaadete viitamiste salvestamine massiivides (
Array), sõnaraamatutes (Dictionary) või kogumites (Set) samuti loob vaikimisi tugevad viitamised elementidele.
var subviews: [UIView] = [] - Vaadete viitamiste salvestamine massiivides (
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.