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