Middle
Sitetable obyekti ichida qanday bog'lanishlar mavjud?
sobes.tech AI
AIdan javob
Kuchli (strong), zaif (weak), egasi bo'lmagan (unowned).
- Kuchli: Ob'ektni egalik qilishni yaratadi, kuchli havolalar mavjud bo'lsa, uning deallocatsiyasini oldini oladi.
- Zaif: Egalik qilishni yaratmaydi. Zaif havola ko'rsatgan ob'ekt deallocatsiya qilinsa, zaif havola avtomatik ravishda nil bo'ladi. Kuchli havolalar aylanishlarini oldini olish uchun ishlatiladi, odatda ota-ona ob'ekti yoki delegatga havolalar uchun.
- Egasi bo'lmagan: Egalik qilishni yaratmaydi. Zaif havolaga o'xshash, lekin ko'rsatilgan ob'ekt butun hayot davomida mavjud bo'lishini kafolatlaydi. Ob'ektga deallocatsiyadan keyin kirishga harakat qilsangiz, bajarilish vaqti xatosi (crash) yuz beradi. Ob'ektlar o'xshash yoki bog'langan hayot tsikliga ega bo'lsa va nil qabul qilinsa, lekin kutilmasa ishlatiladi.
// Kuchli misol
class Parent {
var child: Child?
}
class Child {
var parent: Parent?
}
var parent: Parent? = Parent()
var child: Child? = Child()
parent?.child = child
child?.parent = parent // Kuchli havolalar aylanishini yaratadi
parent = nil // Parent, childdan kuchli havola tufayli dealloc qilinmaydi
child = nil // Child, parentdan kuchli havola tufayli dealloc qilinmaydi
// Zaif misol
class ParentWeak {
var child: ChildWeak?
}
class ChildWeak {
weak var parent: ParentWeak? // Zaif havola
deinit {
print("ChildWeak dealloc")
}
}
var parentWeak: ParentWeak? = ParentWeak()
var childWeak: ChildWeak? = ChildWeak()
parentWeak?.child = childWeak
childWeak?.parent = parentWeak
parentWeak = nil // ParentWeak dealloc
// ChildWeak dealloc
// Egasi bo'lmagan misol
class ParentUnowned {
var child: ChildUnowned?
}
class ChildUnowned {
unowned var parent: ParentUnowned // Egasi bo'lmagan havola
init(parent: ParentUnowned) {
self.parent = parent
}
deinit {
print("ChildUnowned dealloc")
}
}
var parentUnowned: ParentUnowned? = ParentUnowned()
var childUnowned: ChildUnowned? = ChildUnowned(parent: parentUnowned!) // ParentUnowned mavjud bo'lishi kerak
parentUnowned?.child = childUnowned
parentUnowned = nil // ParentUnowned va ChildUnowned dealloc qilinadi