Junior — Middle
Bellek yönetiminde Weak ve Unowned türündeki referanslar arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Swift'te weak ve unowned türündeki 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.- Opsiyonel bir 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.