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