Sobes.tech
Middle

Sitetable nesnesinde hangi bağlantılar var?

sobes.tech yapay zeka

AI'dan gelen yanıt

Güçlü (strong), zayıf (weak), sahip olmayan (unowned).

  • Strong: Nesnenin sahipliğini oluşturur ve güçlü referanslar varsa nesnenin dealloc edilmesini engeller.
  • Weak: Sahiplik oluşturmaz. Zayıf referansın işaret ettiği nesne dealloc edilirse, zayıf referans otomatik olarak nil olur. Güçlü referans döngülerini önlemek için kullanılır, genellikle ebeveyn nesne veya delege referansları için.
  • Unowned: Sahiplik oluşturmaz. Zayıf referansa benzer, ancak referans verilen nesnenin yaşam döngüsü boyunca var olacağını garanti eder. Nesneye erişim denemesi, nesne dealloc edildikten sonra yapılırsa, çalışma zamanı hatası (crash) oluşur. Nesnelerin benzer veya ilişkili yaşam döngüsü varsa ve nil kabul edilebilir, ancak beklenmiyorsa kullanılır.
// Güçlü örneği
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üçlü referans döngüsü oluşturur

parent = nil // Parent, child'ten gelen güçlü referans nedeniyle dealloc edilmez
child = nil // Child, parent'ten gelen güçlü referans nedeniyle dealloc edilmez

// Zayıf örneği
class ParentWeak {
    var child: ChildWeak?
}

class ChildWeak {
    weak var parent: ParentWeak? // Zayıf referans

    deinit {
        print("ChildWeak deallocated")
    }
}

var parentWeak: ParentWeak? = ParentWeak()
var childWeak: ChildWeak? = ChildWeak()

parentWeak?.child = childWeak
childWeak?.parent = parentWeak

parentWeak = nil // ParentWeak deallocated
// ChildWeak deallocated

// Unowned örneği
class ParentUnowned {
    var child: ChildUnowned?
}

class ChildUnowned {
    unowned var parent: ParentUnowned // Sahipsiz referans

    init(parent: ParentUnowned) {
        self.parent = parent
    }

    deinit {
        print("ChildUnowned deallocated")
    }
}

var parentUnowned: ParentUnowned? = ParentUnowned()
var childUnowned: ChildUnowned? = ChildUnowned(parent: parentUnowned!) // ParentUnowned var olmalı

parentUnowned?.child = childUnowned

parentUnowned = nil // ParentUnowned ve ChildUnowned dealloc edilir