Middle
Ի՞նչ հղումներ կան sitetable օբյեկտում։
sobes.tech AI
Պատասխան AI-ից
Հզոր (strong), թույլ (weak), առանց սեփականատիրոջ (unowned):
- Հզոր: Ստեղծում է օբյեկտի տիրապետում, կանխում է նրա deallocation-ը, քանի դեռ կան հզոր հղումներ:
- Թույլ: Չի ստեղծում տիրապետում: Եթե այն օբյեկտը, որի վրա հղում է թույլ հղումը, deallocate է, թույլ հղումը ավտոմատապես դառնում է nil: Օգտագործվում է հզոր հղումների ցիկլերը կանխելու համար, հաճախ՝ ծնողի կամ դելեգատի հղումների համար:
- Անվлад: Չի ստեղծում տիրապետում: Դիպուկ է թույլ հղման նման, բայց երաշխավորում է, որ այն օբյեկտը, որի վրա հղում է, կշարունակի գոյություն ունենալ ամբողջ կյանքի ընթացքում առանցվлад հղումով: Եթե փորձեք մուտք գործել օբյեկտին նրա deallocate-ից հետո, տեղի կունենա սխալ (crash): Օգտագործվում է, երբ օբյեկտները ունեն նույն կամ կապված կյանքի ցիկլ, և nil-ը թույլատրվում է, բայց սպասվում չէ:
// Օրինակ Հզոր
class Parent {
var child: Child?
}
class Child {
var parent: Parent?
}
var parent: Parent? = Parent()
var child: Child? = Child()
parent?.child = child
child?.parent = parent // Ստեղծում է հզոր հղումների ցիկլ
parent = nil // Parent չի լինի deallocated՝ հզոր հղումից հետո
child = nil // Child չի լինի deallocated՝ հզոր հղումից հետո
// Օրինակ Թույլ
class ParentWeak {
var child: ChildWeak?
}
class ChildWeak {
weak var parent: ParentWeak? // Թույլ հղում
deinit {
print("ChildWeak deallocated")
}
}
var parentWeak: ParentWeak? = ParentWeak()
var childWeak: ChildWeak? = ChildWeak()
parentWeak?.child = childWeak
childWeak?.parent = parentWeak
parentWeak = nil // ParentWeak deallocated
// ChildWeak deallocated
// Օրինակ Անվлад
class ParentUnowned {
var child: ChildUnowned?
}
class ChildUnowned {
unowned var parent: ParentUnowned // Անվлад հղում
init(parent: ParentUnowned) {
self.parent = parent
}
deinit {
print("ChildUnowned deallocated")
}
}
var parentUnowned: ParentUnowned? = ParentUnowned()
var childUnowned: ChildUnowned? = ChildUnowned(parent: parentUnowned!) // ParentUnowned պետք է գոյություն ունենա
parentUnowned?.child = childUnowned
parentUnowned = nil // ParentUnowned deallocated, ChildUnowned deallocated