Sobes.tech
Junior — Middle

U kojoj situaciji je preporučljivo koristiti weak ili unowned za upravljanje memorijom u timu programera?

sobes.tech АИ

Одговор од АИ

U iOS-u, za upravljanje memorijom pomoću ARC (Automatsko brojanje referenci), koriste se slabe (weak) i nesigurne (unowned) reference kako bi se izbegli ciklusi zadržavanja objekata.

  • weak se koristi kada referenca može postati nil u nekom trenutku, tj. objekat na koji se odnosi može biti obrisan. Slaba referenca automatski se postavlja na nil kada se objekat oslobodi. Ovo je pogodno kada veza nije obavezna i objekat može nestati.

  • unowned se koristi kada referenca uvek treba da ukazuje na postojeći objekat i ne može biti nil. Ako je objekat oslobođen, a unowned referenca ostane, to će dovesti do greške u toku izvršavanja. Obično se unowned koristi kada je životni ciklus referenciranog objekta garantovano duži od vlasnika reference.

Primer:

class Parent {
    var child: Child?
}

class Child {
    weak var parent: Parent? // weak, jer parent može biti obrisan ranije
}

// Ili

class Customer {
    let card: CreditCard
    init() {
        card = CreditCard(customer: self)
    }
}

class CreditCard {
    unowned let customer: Customer // unowned, jer kartica ne može postojati bez klijenta
    init(customer: Customer) {
        self.customer = customer
    }
}

Rezime:

  • Koristite weak kada referenca može postati nil i želite da izbegnete ciklus zadržavanja.
  • Koristite unowned kada referenca uvek mora biti validna i objekat postoji duže od reference.