Sobes.tech
Junior — Middle

In welke situatie is het beter om weak of unowned te gebruiken voor geheugenbeheer in een ontwikkelaarsteam?

sobes.tech AI

Antwoord van AI

In iOS, om geheugenbeheer met ARC (Automatische Referentie Telling) worden zwakke (weak) en onveilige (unowned) referenties gebruikt om objectretentiecycli te voorkomen.

  • weak wordt gebruikt wanneer de referentie op een bepaald moment nil kan worden, dat wil zeggen dat het object waarnaar wordt verwezen kan worden verwijderd. De zwakke referentie wordt automatisch op nil gezet wanneer het object wordt vrijgegeven. Dit is geschikt wanneer de relatie niet verplicht is en het object kan verdwijnen.

  • unowned wordt gebruikt wanneer de referentie altijd naar een bestaand object moet wijzen en niet nil kan zijn. Als het object wordt vrijgegeven en de onveilige referentie blijft bestaan, leidt dit tot een runtime-fout. Gewoonlijk wordt unowned gebruikt wanneer de levenscyclus van het verwezen object gegarandeerd langer is dan die van de eigenaar van de referentie.

Voorbeeld:

class Parent {
    var child: Child?
}

class Child {
    weak var parent: Parent? // weak, omdat de parent eerder kan worden verwijderd
}

// Of

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

class CreditCard {
    unowned let customer: Customer // unowned, omdat de kaart niet zonder klant kan bestaan
    init(customer: Customer) {
        self.customer = customer
    }
}

Samenvatting:

  • Gebruik weak wanneer de referentie nil kan worden en je een retentiecyclus wilt voorkomen.
  • Gebruik unowned wanneer de referentie altijd geldig moet zijn en het object langer bestaat dan de referentie.