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