Junior — Middle
V akej situácii je vhodnejšie použiť weak alebo unowned na správu pamäte v tíme vývojárov?
sobes.tech AI
Odpoveď od AI
V iOS na spravovanie pamäte pomocou ARC (Automatické počítanie referencií) sa používajú slabé (weak) a nebezpečné (unowned) odkazy na zabránenie cyklov udržiavania objektov.
-
weak sa používa, keď odkaz môže v určitom momente stať nil, teda objekt, na ktorý odkazuje, môže byť odstránený. Slabý odkaz sa automaticky nastaví na nil pri uvoľnení objektu. Toto je vhodné, keď vzťah nie je povinný a objekt môže zmiznúť.
-
unowned sa používa, keď odkaz musí vždy ukazovať na existujúci objekt a nemôže byť nil. Ak je objekt uvoľnený a unowned odkaz zostane, spôsobí to chybu počas behu. Zvyčajne sa unowned používa, keď je životný cyklus odkazovaného objektu garantovane dlhší ako u vlastníka odkazu.
Príklad:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // weak, pretože parent môže byť skôr odstránený
}
// Alebo
class Customer {
let card: CreditCard
init() {
card = CreditCard(customer: self)
}
}
class CreditCard {
unowned let customer: Customer // unowned, pretože karta nemôže existovať bez zákazníka
init(customer: Customer) {
self.customer = customer
}
}
Zhrnutie:
- Použite weak, keď odkaz môže byť nil a chcete sa vyhnúť cyklom udržiavania.
- Použite unowned, keď odkaz musí byť vždy platný a objekt existuje dlhšie ako odkaz.