Sobes.tech
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