Junior
Deinitializator nima?
sobes.tech AI
AIdan javob
deinit (yıkıcı) - bu sinfning xotira bilan ishlash jarayonida tozalash yoki yakunlash uchun zarur bo'lgan har qanday tozalash yoki yakunlash ishlarini bajarish uchun chaqiriladigan maxsus metoddir.
Asosiy xususiyatlar:
- Faqat sinflarda mavjud. Tuzilmalar va enumlar yıkıcıga ega emas.
- Bir sinf uchun faqat bittagina bo'lishi mumkin.
- Parametr qabul qilmaydi va qiymat qaytarmaydi.
- Avtomatik ravishda chaqiriladi. Aniq chaqirish mumkin emas.
- Superklassdan meros qilib oladi. Subklassning yıkıcisi superklassning yıkıcidan oldin chaqiriladi.
deinit uchun odatiy vazifalar:
- Resurslarni bo'shatish (masalan, fayllarni yopish, bildirishnomalarni bekor qilish, tarmoq so'rovlarini bekor qilish).
- Boshqa obyektlar yoki holatlarni tozalash.
Foydalanish misoli:
class FileHandler {
var fileDescriptor: Int32?
init(filePath: String) {
// Faylni ochish
fileDescriptor = open(filePath, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR)
if fileDescriptor == -1 {
print("Faylni ochib bo'lmadi")
fileDescriptor = nil
} else {
print("Fayl ochildi, descriptor: \(fileDescriptor!)")
}
}
deinit {
// Ob'ekt bo'shatilmasidan oldin faylni yopish
if let fd = fileDescriptor {
close(fd)
print("Descriptor bilan fayl yopildi: \(fd)")
}
print("FileHandler instansiyasi yo'q qilindi.")
}
}
// Sinfning instansiyasini yaratish
var handler: FileHandler? = FileHandler(filePath: "mydata.txt")
// Fayl bilan ishlash
// Referensiyani o'chirish, shunda instansiya bo'shatiladi
handler = nil // Bu yerda `deinit` chaqiriladi
deinit Swiftning avtomatik referenslar hisoblash (ARC) xotira boshqarish mexanizmi bilan chambarchas bog'liq. ARC obyektlarga bo'lgan referenslarni kuzatadi. Agar obyektga bo'lgan kuchli referenslar soni nolga teng bo'lsa, ARC obyektni bo'shatadi va uni bo'shatishdan oldin uning yıkıcisini chaqiradi.