Sobes.tech
Middle

Swift kontekstida unowned nima?

sobes.tech AI

AIdan javob

Unowned Swift'da avtomatik xotira boshqaruviga (ARC) ishora qiladi. Unowned referanslar, ikki ob'ekt o'zaro kuchli referenslar tsiklini oldini olish uchun ishlatiladi. Unowned referens ob'ektning referenslar hisobini oshirmaydi. Weak referensdan farqli o'laroq, unowned referens har doim mavjud bo'lgan instantsiyaga ishora qilishni kutadi; agar unowned referens bilan ko'rsatilgan instantsiya bo'shatilsa, unga kirish harakati bajarilsa, xatolik yuz beradi. Bu, bog'langan ob'ektning hayot aylanishi unowned referensni o'z ichiga olgan ob'ektning hayot aylanishiga teng yoki undan uzun bo'lsa, ishlatiladi.

Foydalanish misoli:

class Department {
    var name: String
    var courses: [Course] = []

    init(name: String) {
        self.name = name
        print("\(name) bo'lim boshlanmoqda")
    }

    deinit {
        print("\(name) bo'lim tugatilmoqda")
    }
}

class Course {
    var name: String
    unowned var department: Department // Unowned zaif referens

    init(name: String, department: Department) {
        self.name = name
        self.department = department
        print("\(name) kurs boshlanmoqda")
    }

    deinit {
        print("\(name) kurs tugatilmoqda")
    }
}

var accounting: Department? = Department(name: "Hisob-kitob")
var introToAccounting: Course? = Course(name: "Hisob-kitobga kirish", department: accounting!)

accounting!.courses.append(introToAccounting!)

accounting = nil // Endi Department ob'ekti bo'shatilishi mumkin
introToAccounting = nil // Endi Course ob'ekti bo'shatilishi mumkin

Bu misolda, Course Department ga unowned referens bilan bog'langan. Chunki, Course Departmentsiz mavjud bo'lishi mumkin emas (mantiqan), va Department courses massiv orqali Course ob'ektining hayot aylanishini boshqaradi, shuning uchun unowned ishlatilishi to'g'ri. Bu, accounting va introToAccounting o'rtasidagi kuchli referenslar tsiklini oldini oladi. accounting nil bo'lsa, Department ob'ekti bo'shatiladi, va keyin Course ob'ekti ham, unga endi kuchli referenslar qolmagani uchun, bo'shatiladi.