Sobes.tech
Junior — Middle

Kas struktuuril või klassil on ressursi puhastamise meetod või destruktor?

sobes.tech AI

Vastus AI-lt

Swiftis ei ole struktuuridel (struct) destruktorit, kuna need on väärtusetüübid ja neid hallatakse automaatselt. Klasidel (class) võib olla destruktor — meetod deinit, mis kutsutakse enne objekti mälust vabastamist. Destruktoris vabastatakse tavaliselt ressursid, suletakse failid, tühistatakse tellimused jms.

Näide klassist koos destruktoriga:

class FileHandler {
    let fileName: String

    init(fileName: String) {
        self.fileName = fileName
        print("Fail avatud \(fileName)")
    }

    deinit {
        print("Fail suletud \(fileName)")
    }
}

var handler: FileHandler? = FileHandler(fileName: "data.txt")
handler = nil // kutsub deinit

Seetõttu on ainult klassidel deinit destruktor, struktuuridel — mitte.