Swift Academy · Les

Deinitializers en de levenscyclus van geheugen

deinit gebruiken om resources op te ruimen voordat een object wordt vrijgegeven.

Les 4 van 412 stappen

Deinitializers en de levenscyclus van geheugen is een gratis Swift Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Swift Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Swift Academy bevat in totaal 4 lessen.

Welkom

Swift-klassen kunnen een `deinit` definiëren die vlak voordat de instantie wordt vrijgegeven, wordt uitgevoerd. Inzicht in de volledige levenscyclus van een object — init → gebruik → deinit — is essentieel voor resourcebeheer.

Wat is deinit?

```swift class FileHandle { let path: String init(path: String) { self.path = path; print("Opened \(path)") } deinit { print("Closed \(path)") } } do { let f = FileHandle(path: "/tmp/log.txt") } // deinit called here when f goes out of scope ```

Syntaxisregels voor `deinit`

• Alleen klassen — structs en enums hebben geen `deinit` • Geen parameters of retourwaarde • Geen haakjes: `deinit { }`, niet `deinit() { }` • Wordt automatisch aangeroepen door ARC — roep het nooit zelf aan • De `deinit` van de superklasse wordt automatisch aangeroepen na de `deinit` van de subklasse

Toepassingen voor opruimen

Veelgebruikte toepassingen voor `deinit`: • Netwerkverbindingen sluiten • Waarnemers voor meldingen verwijderen: `NotificationCenter.default.removeObserver(self)` • Timers ongeldig maken • Bestandshandles of databaseverbindingen sluiten

Referentieteller en levenscyclus

ARC houdt bij hoeveel sterke verwijzingen naar een object wijzen: ```swift var a: Dog? = Dog() // retain count = 1 var b = a // retain count = 2 a = nil // retain count = 1 b = nil // retain count = 0 → deinit called ```

`deinit`-keten van subklassen

```swift class Base { deinit { print("Base deinit") } } class Child: Base { deinit { print("Child deinit") } // super.deinit called automatically after } var c: Child? = Child() c = nil // prints: Child deinit, then Base deinit ```

Vasthouden voorkomen met `weak`

```swift class Owner { var pet: Dog? deinit { print("Owner gone") } } class Dog { weak var owner: Owner? // weak = no strong retain deinit { print("Dog gone") } } ``` Wanneer `owner` op nil wordt gezet, kan `Owner` worden vrijgegeven, ook al bevat `Dog` een verwijzing.

Retentiecycli verhinderen `deinit`

```swift class A { var b: B? } class B { var a: A? } var a: A? = A() var b: B? = B() a?.b = b b?.a = a a = nil b = nil // deinit never called — retain cycle! ```

Patroon voor timers ongeldig maken

```swift class PollingService { var timer: Timer? func start() { timer = Timer.scheduledTimer(...) } deinit { timer?.invalidate() timer = nil print("Timer stopped") } } ```

Lekken opsporen met Instruments

Als `deinit` nooit wordt aangeroepen, heb je waarschijnlijk een retentiecyclus. Gebruik de sjabloon Leaks in Xcode Instruments → Leaks om objecten te vinden die wel zijn toegewezen maar nooit zijn vrijgegeven.

Korte controle

Welke typen kunnen een `deinit` definiëren?

Samenvatting

Belangrijkste punten: • `deinit { }` — ruim resources op vóór het vrijgeven • Alleen klassen; de `deinit` van de superklasse wordt automatisch na die van de subklasse aangeroepen • ARC bepaalt wanneer `deinit` wordt uitgevoerd (de referentieteller daalt naar 0) • Retentiecycli verhinderen `deinit` — doorbreek ze met `weak`/`unowned` • Gebruik Instruments Leaks om objecten te vinden waarbij `deinit` nooit wordt uitgevoerd Cursus voltooid! Volgende onderwerp: enum-patronen en toestandsmachines.
Gratis beginnen

Leer Swift met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
122
Lessen
409

Veelgestelde vragen

Is de les “Deinitializers en de levenscyclus van geheugen” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “Deinitializers en de levenscyclus van geheugen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Swift Academy bevat in totaal 4 lessen.

Wat leer ik in “Deinitializers en de levenscyclus van geheugen”?

deinit gebruiken om resources op te ruimen voordat een object wordt vrijgegeven. Je oefent met Swift Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Swift Academy te beginnen?

Ervaring vooraf is niet nodig. Swift Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Deinitializers en de levenscyclus van geheugen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Swift Academy?

Ja. Elke les over Swift Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Kl overerving en het super-sleutelwoord
  2. override, final en subklassen voorkomen
  3. Type casting: is, as?, as! en as
  4. Deinitializers en de levenscyclus van geheugen
← Terug naar Swift Academy