Sobes.tech
Junior — Middle

Hoe organiseer je correct links in het objectmodel om geheugenlekken te voorkomen?

sobes.tech AI

Antwoord van AI

Om geheugenlekken door cycli te voorkomen in het objectmodel op iOS (met Swift of Objective-C), is het belangrijk om correct gebruik te maken van sterke (strong), zwakke (weak) en onbezittende (unowned) referenties.

Belangrijkste idee:

  • strong — bezit de referentie, verhoogt de referentieteller van het object.
  • weak — bezit de referentie niet, verhoogt de teller niet, wordt automatisch op nil gezet wanneer het object wordt verwijderd.
  • unowned — bezit de referentie niet, verhoogt de teller niet, wordt niet op nil gezet, wordt gebruikt wanneer het object gegarandeerd langer leeft.

Vaak ontstaan cycli, bijvoorbeeld tussen ouder en kind of tussen delegate en object. Om cycli te voorkomen:

  • De ouder houdt het kind vast via strong.
  • Het kind verwijst naar de ouder via weak of unowned.

Voorbeeld in Swift:

class Parent {
    var child: Child?
}

class Child {
    weak var parent: Parent?  // zwakke referentie om cycli te voorkomen
}

let parent = Parent()
let child = Child()
parent.child = child
child.parent = parent

Op deze manier wordt het geheugen correct vrijgegeven wanneer parent en child niet meer worden gebruikt, zonder cycli of geheugenlekken.