Swift Academy · Lektion

Deinitialisatorer og hukommelseslivscyklus

Brug deinit til at rydde ressourcer op, før et objekt frigives fra hukommelsen.

Lektion 4 af 412 trin

Deinitialisatorer og hukommelseslivscyklus er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.

Velkommen

Swift-klasser kan definere en `deinit`, der kører, lige før instansen frigives. Det er vigtigt at forstå hele objektets livscyklus — init → brug → deinit — for at kunne håndtere ressourcer.

Hvad er 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 ```

Syntaksregler for deinit

• Kun klasser — structs og enums har ikke `deinit` • Ingen parametre eller returværdi • Ingen parenteser: `deinit { }`, ikke `deinit() { }` • Kaldes automatisk af ARC — kald den aldrig selv • Superklassens `deinit` kaldes automatisk efter underklassens `deinit`

Anvendelser til oprydning

Almindelige anvendelser af `deinit`: • Luk netværksforbindelser • Fjern notifikationsobservatører: `NotificationCenter.default.removeObserver(self)` • Ugyldiggør timere • Luk filreferencer eller databaseforbindelser

Referenceantal og livscyklus

ARC holder styr på, hvor mange stærke referencer der peger på et objekt: ```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-kæde for underklasser

```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 ```

weak forhindrer fastholdelse

```swift class Owner { var pet: Dog? deinit { print("Owner gone") } } class Dog { weak var owner: Owner? // weak = no strong retain deinit { print("Dog gone") } } ``` Når `owner` sættes til nil, kan `Owner` frigives, selvom `Dog` har en reference.

Referencecyklusser forhindrer 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! ```

Mønster til ugyldiggørelse af timer

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

Registrering af lækager med Instruments

Hvis `deinit` aldrig kaldes, har du sandsynligvis en referencecyklus. Brug skabelonen Leaks i Xcode Instruments → til at finde objekter, der blev allokeret, men aldrig frigivet.

Hurtigt tjek

Hvilke typer kan definere en `deinit`?

Opsummering

Vigtigste pointer: • `deinit { }` — ryd op i ressourcer før frigivelse • Kun klasser; superklassens deinit kaldes automatisk efter underklassens • ARC bestemmer, hvornår deinit udløses (referenceantallet falder til 0) • Referencecyklusser forhindrer deinit — bryd dem med `weak`/`unowned` • Brug Instruments Leaks til at finde objekter, hvis deinit aldrig udløses Kurset er færdigt! Næste emne: enum-mønstre og tilstandsmaskiner.
Gratis at komme i gang

Lær Swift med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
122
Lektioner
409

Ofte stillede spørgsmål

Er lektionen “Deinitialisatorer og hukommelseslivscyklus” gratis?

Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Deinitialisatorer og hukommelseslivscyklus”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Deinitialisatorer og hukommelseslivscyklus”?

Brug deinit til at rydde ressourcer op, før et objekt frigives fra hukommelsen. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Swift Academy?

Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Deinitialisatorer og hukommelseslivscyklus”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Swift Academy-lektion?

Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Klassenedarvning og nøgleordet super
  2. override, final og forhindring af underklassificering
  3. Typecasting: is, as?, as! og as
  4. Deinitialisatorer og hukommelseslivscyklus
← Tilbage til Swift Academy