Middle
Jak se ukládají pohledy, které jsou typem odkazu?
sobes.tech AI
Odpověď od AI
Vues (UIView a její podtřídy) v iOS jsou třídy, a tedy odkazové typy. Uložení odkazů na ně se provádí pomocí následujících mechanismů:
-
Silné odkazy (Strong References):
- Výchozí, pokud deklarujete vlastnost pro UIView bez specifikátoru
weaknebounowned, vytváří to silný odkaz. - Silný odkaz zvyšuje čítač odkazů objektu. Objekt nebude odstraněn z paměti, dokud na něj existuje alespoň jeden silný odkaz.
- Toto je standardní způsob ukládání views, když je požadováno, aby zůstaly v paměti a byly dostupné.
//Silný odkaz var myView: UIView = UIView() - Výchozí, pokud deklarujete vlastnost pro UIView bez specifikátoru
-
Slabé odkazy (Weak References):
- Deklarují se pomocí klíčového slova
weak. - Slabý odkaz nezvyšuje čítač odkazů objektu.
- Slabé odkazy nebrání odstranění objektu z paměti, pokud na něj nezůstaly žádné silné odkazy.
- Používají se k prevenci cyklů silných odkazů, typická situace je vztah rodič-dítě, kde rodič má silný odkaz na dítě, a dítě může mít odkaz na rodiče. V takovém případě by zpětný odkaz na rodiče měl být slabý.
- Slabé odkazy musí být volitelné (
Optional), protože objekt může být odstraněn a odkaz se stanenil.
weak var parentView: UIView? - Deklarují se pomocí klíčového slova
-
Neowning odkazy (Unowned References):
- Deklarují se pomocí klíčového slova
unowned. - Stejně jako slabé odkazy, nezvyšují čítač odkazů.
- Rozdíl: na rozdíl od slabých odkazů, neowning odkazy ne jsou volitelné. Předpokládá se, že objekt bude žít alespoň tak dlouho, jak existuje odkaz na něj. Pokud se pokusíte přistoupit k objektu přes unowned odkaz po jeho uvolnění, dojde k pádu aplikace.
- Používají se, když jste si jisti, že životní cyklus odkazu nepřekročí životní cyklus objektu, na který odkazuje. V kontextu views je to méně běžné než
weak.
//Méně typické pro views, ale možné unowned var childView: UIView - Deklarují se pomocí klíčového slova
-
Pole a kolekce:
- Uložení odkazů na views v polích (
Array), slovnících (Dictionary) nebo množinách (Set) také výchozí způsob vytváří silné odkazy na prvky kolekce.
var subviews: [UIView] = [] - Uložení odkazů na views v polích (
Volba mezi silným, slabým nebo neowning odkazem závisí na konkrétním scénáři použití a správě životního cyklu objektů, aby se zabránilo únikům paměti. V SwiftUI jsou koncepty správy životního cyklu views trochu odlišné, ale v kontextu UIKit tyto mechanismy zůstávají hlavním způsobem ukládání odkazů.