Junior — Middle
Xotira boshqaruvida Weak va Unowned turlari qanday farq qiladi?
sobes.tech AI
AIdan javob
Swift'da weak ve unowned referanslar, hafıza yönetiminde güçlü referans döngülerini (retain cycles) önlemek için kullanılır, ancak davranış ve kullanım açısından farklılık gösterirler.
-
Weak (zayıf referans):
nilolabilir.- Bir opsiyonel tip olarak tanımlanır (
var delegate: SomeDelegate? weak). - Bir nesnenin yaşamı boyunca
nilolabilecek referanslar için kullanılır, örneğin, delegeler. - Sistem, referans verilen nesne serbest bırakıldığında
weakreferansı otomatik olaraknilyapar.
-
Unowned (sahipsiz):
nilolamaz (opsiyonel olmayan tip).- Bir nesnenin yaşamı boyunca var olduğu garantilidir, örneğin, ebeveyn-çocuk ilişkileri.
- Eğer referans verilen nesne zaten serbest bırakılmışsa, erişim hatası (çökme) ile sonuçlanır.
Örnek:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
// Burada, tenant `unowned` çünkü bir daire, kiracı olmadan var olamaz.
class DelegateHolder {
weak var delegate: SomeDelegate?
}
// Delegat `weak`, çünkü daha önce serbest bırakılabilir.
Bu nedenle, weak nil olabilecek referanslar için uygundur, unowned ise nesnenin yaşamı boyunca her zaman geçerli olması gereken referanslar içindir.