Sobes.tech
Middle

Welke links zijn er in het sitetable-object?

sobes.tech AI

Antwoord van AI

Sterk (strong), zwak (weak), zonder eigenaar (unowned).

  • Sterk: Creëert het bezit van het object en voorkomt de deallocatie ervan zolang er sterke verwijzingen bestaan.
  • Zwak: Creëert geen bezit. Als het object waarnaar de zwakke verwijzing verwijst wordt gedealloceerd, wordt de zwakke verwijzing automatisch nil. Gebruikt om cycli van sterke verwijzingen te voorkomen, vaak voor verwijzingen naar het ouderobject of delegate.
  • Zonder eigenaar: Creëert geen bezit. Vergelijkbaar met de zwakke verwijzing, maar garandeert dat het verwezen object gedurende zijn hele levenscyclus zal bestaan zonder eigenaar. Als geprobeerd wordt toegang te krijgen tot het object na de deallocatie, zal een runtime-fout (crash) optreden. Gebruikt wanneer objecten een vergelijkbare of verbonden levenscyclus hebben, en nil acceptabel maar niet verwacht wordt.
// Voorbeeld van Strong
class Parent {
    var child: Child?
}

class Child {
    var parent: Parent?
}

var parent: Parent? = Parent()
var child: Child? = Child()

parent?.child = child
child?.parent = parent // Creëert een cyclus van sterke verwijzingen

parent = nil // Parent wordt niet gedealloceerd vanwege de sterke verwijzing van child
child = nil // Child wordt niet gedealloceerd vanwege de sterke verwijzing van parent

// Voorbeeld van Weak
class ParentWeak {
    var child: ChildWeak?
}

class ChildWeak {
    weak var parent: ParentWeak? // Zwakke verwijzing

    deinit {
        print("ChildWeak gedealloceerd")
    }
}

var parentWeak: ParentWeak? = ParentWeak()
var childWeak: ChildWeak? = ChildWeak()

parentWeak?.child = childWeak
childWeak?.parent = parentWeak

parentWeak = nil // ParentWeak gedealloceerd
// ChildWeak gedealloceerd

// Voorbeeld van Unowned
class ParentUnowned {
    var child: ChildUnowned?
}

class ChildUnowned {
    unowned var parent: ParentUnowned // Zonder eigenaar

    init(parent: ParentUnowned) {
        self.parent = parent
    }

    deinit {
        print("ChildUnowned gedealloceerd")
    }
}

var parentUnowned: ParentUnowned? = ParentUnowned()
var childUnowned: ChildUnowned? = ChildUnowned(parent: parentUnowned!) // ParentUnowned moet bestaan

parentUnowned?.child = childUnowned

parentUnowned = nil // ParentUnowned gedealloceerd, ChildUnowned gedealloceerd