Middle
sitetable obyektində hansı linklər var?
sobes.tech Süni İntellekt
AI-dan cavab
Güclü (strong), zəif (weak), mülkiyyətsiz (unowned).
- Güclü: Objekti mülkiyyət edir və güclü istinadlar mövcud olduqda onun dealloc edilməsinin qarşısını alır.
- Zəif: Mülkiyyət yaratmır. Əgər zəif istinad etdiyi obyekt dealloc edilərsə, zəif istinad avtomatik olaraq nil olur. Güclü istinad döngələrini qarşısını almaq üçün istifadə olunur, çox vaxt valideyn obyekti və ya nümayəndə üçün.
- Mülkiyyətsiz: Mülkiyyət yaratmır. Zəif istinada bənzəyir, lakin göstərilən obyektin bütün həyat dövrü ərzində mövcud olacağını təmin edir. Əgər obyektə onun dealloc edilməsindən sonra daxil olmağa çalışsanız, icra zamanı xəta (crash) baş verər. Obiektlərin oxşar və ya əlaqəli həyat dövrü varsa və nil qəbul edilə bilərsə, lakin gözlənilməzsə istifadə olunur.
// Güclü nümunə
class Parent {
var child: Child?
}
class Child {
var parent: Parent?
}
var parent: Parent? = Parent()
var child: Child? = Child()
parent?.child = child
child?.parent = parent // Güclü istinadlar döngüsü yaradır
parent = nil // Parent, child-dən güclü istinad səbəbindən dealloc edilmir
child = nil // Child, parent-dən güclü istinad səbəbindən dealloc edilmir
// Zəif nümunə
class ParentWeak {
var child: ChildWeak?
}
class ChildWeak {
weak var parent: ParentWeak? // Zəif istinad
deinit {
print("ChildWeak deallocated")
}
}
var parentWeak: ParentWeak? = ParentWeak()
var childWeak: ChildWeak? = ChildWeak()
parentWeak?.child = childWeak
childWeak?.parent = parentWeak
parentWeak = nil // ParentWeak deallocated
// ChildWeak deallocated
// Mülkiyyətsiz nümunə
class ParentUnowned {
var child: ChildUnowned?
}
class ChildUnowned {
unowned var parent: ParentUnowned // Mülkiyyətsiz istinad
init(parent: ParentUnowned) {
self.parent = parent
}
deinit {
print("ChildUnowned deallocated")
}
}
var parentUnowned: ParentUnowned? = ParentUnowned()
var childUnowned: ChildUnowned? = ChildUnowned(parent: parentUnowned!) // ParentUnowned mövcud olmalıdır
parentUnowned?.child = childUnowned
parentUnowned = nil // ParentUnowned və ChildUnowned dealloc ediləcək