Sobes.tech
Junior — Middle

Van-e a szerkezetnek vagy osztálynak erőforrás-tisztító módszere vagy destruktora?

sobes.tech MI

Válasz az MI-től

Swiftben a struktúráknak (struct) nincs destruktoruk, mivel értéktípusok és automatikusan kezeltek. A osztályok (class) viszont rendelkezhetnek deinit nevű destruktorral, amelyet az objektum memória felszabadítása előtt hívnak meg. A destruktorban általában erőforrásokat szabadítanak fel, fájlokat zárnak be, leiratkoznak stb.

Példa egy osztályra destruktorral:

class FileHandler {
    let fileName: String

    init(fileName: String) {
        self.fileName = fileName
        print("Fájl megnyitva \(fileName)")
    }

    deinit {
        print("Fájl bezárva \(fileName)")
    }
}

var handler: FileHandler? = FileHandler(fileName: "data.txt")
handler = nil // meghívja a deinit-et

Ezért csak osztályoknak van deinit destruktoruk, struktúráknak nincs.