Sobes.tech
Junior

Deinitializator nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Deinitializator (deinit) xüsusi bir metoddur və sinif nümunəsi yaddaşdan azad edilən zaman dərhal əvvəl çağrılır. Lazımi təmizləmə və ya yekunlaşdırma işlərini həyata keçirmək üçün istifadə olunur.

Əsas xüsusiyyətlər:

  • Yalnız sinflərdə mövcuddur. Struktur və tərtibdə deinit yoxdur.
  • Sinif üçün yalnız bir də ola bilər.
  • Parametr qəbul etmir və dəyər qaytarmır.
  • Avtomatik olaraq çağrılır. Açıqlama ilə çağrıla bilməz.
  • Superklassdan irsən alınır. Subklassın deinit-i superklassın deinit-dən əvvəl çağrılır.

deinit üçün tipik vəzifələr:

  • Resursların azad edilməsi (məsələn, faylları bağlamaq, bildirişləri ləğv etmək, şəbəkə sorğularını ləğv etmək).
  • Digər obyektlərin və ya vəziyyətlərin təmizlənməsi.

İstifadə nümunəsi:

class FileHandler {
    var fileDescriptor: Int32?

    init(filePath: String) {
        // Faylı açırıq
        fileDescriptor = open(filePath, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR)
        if fileDescriptor == -1 {
            print("Faylı açmaq mümkün olmadı")
            fileDescriptor = nil
        } else {
            print("Fayl açıldı, deskriptor: \(fileDescriptor!)")
        }
    }

    deinit {
        // Obrazı azad etməzdən əvvəl faylı bağlayırıq
        if let fd = fileDescriptor {
            close(fd)
            print("Deskriptor ilə fayl bağlandı: \(fd)")
        }
        print("FileHandler nümunəsi deinitializə olundu.")
    }
}

// Sinif nümunəsi yaradılır
var handler: FileHandler? = FileHandler(filePath: "mydata.txt")

// Fayl ilə işləmək

// Nümunəni azad etmək üçün referansı sıfırla
handler = nil // Burada `deinit` çağrılacaq

deinit Swift-in avtomatik referans sayımı (ARC) yaddaş idarəetmə mexanizmi ilə sıx bağlıdır. ARC obyektlərə olan referansları izləyir. Güclü referansların sayı sıfıra çatanda, ARC obyekti azad edir və onu azad etməzdən əvvəl onun deinit metodunu çağırır.