Sobes.tech
Junior — Middle

Ar struktūra ar klasė turi išvalymo metodą ar destruktorių?

sobes.tech AI

Atsakymas iš AI

Swift'e struktūros (struct) neturi destruktorių, nes jos yra reikšmių tipai ir yra automatiškai valdomos. Klasės (class) gali turėti destruktorių — metodą deinit, kuris kviečiamas prieš išlaisvinant objektą iš atminties. Destruktoriuje paprastai atlaisvinami ištekliai, uždaromi failai, atšaukiamos prenumeratos ir pan.

Pavyzdys su klase ir destruktoriu:

class FileHandler {
    let fileName: String

    init(fileName: String) {
        self.fileName = fileName
        print("Atidarytas failas \(fileName)")
    }

    deinit {
        print("Uždarytas failas \(fileName)")
    }
}

var handler: FileHandler? = FileHandler(fileName: "data.txt")
handler = nil // iškvies `deinit`

Todėl tik klasės turi destruktorių deinit, struktūros — ne.