Sobes.tech
Junior — Middle

Milyen helyzetben érdemes inkább weak vagy unowned-t használni a memória kezelésére egy fejlesztői csapatban?

sobes.tech MI

Válasz az MI-től

iOS-ben az ARC (Automatikus Hivatkozásszámlálás) segítségével történő memória kezeléshez gyenge (weak) és nem biztonságos (unowned) hivatkozásokat használnak az objektumok megtartási ciklusainak elkerülése érdekében.

  • weak akkor használatos, amikor a hivatkozás egy időpontban nil lehet, azaz az általa hivatkozott objektum törölhető. A gyenge hivatkozás automatikusan nil lesz, amikor az objektum felszabadul. Ez akkor megfelelő, ha a kapcsolat nem kötelező és az objektum eltűnhet.

  • unowned akkor használatos, amikor a hivatkozásnak mindig egy létező objektumra kell mutatnia, és nem lehet nil. Ha az objektum felszabadul, és az unowned hivatkozás megmarad, akkor futásidejű hibát okoz. Általában az unowned akkor alkalmazható, amikor a hivatkozott objektum életciklusa garantáltan hosszabb, mint a hivatkozás tulajdonosának életciklusa.

Példa:

class Parent {
    var child: Child?
}

class Child {
    weak var parent: Parent? // weak, mivel a parent korábban törölhető
}

// Vagy

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

class CreditCard {
    unowned let customer: Customer // unowned, mivel a kártya nem létezhet ügyfél nélkül
    init(customer: Customer) {
        self.customer = customer
    }
}

Összefoglalás:

  • Használja a weak-et, amikor a hivatkozás nil lehet, és el akarja kerülni a megtartási ciklusokat.
  • Használja az unowned-et, amikor a hivatkozás mindig érvényes kell, hogy legyen, és az objektum hosszabb ideig létezik, mint a hivatkozás.