Junior — Middle
Yönetilen ortamlarda döngüsel referanslara sahip nesnelerin belleği nasıl serbest bırakılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Yönetilen ortamlarda, örneğin ARC (Otomatik Referans Sayımı) ile iOS'ta, döngüsel referanslara sahip nesnelerin bellek serbest bırakılması otomatik olarak gerçekleşmez, çünkü ARC referans döngülerini kıramaz.
Bu sorunu çözmek için, nesnenin referans sayısını artırmayan zayıf (weak) ve sahip olmayan (unowned) referanslar kullanılır. Bu, döngüleri kırmaya ve belleği doğru şekilde serbest bırakmaya olanak tanır.
Örnek:
class Person {
var name: String
weak var apartment: Apartment? // zayıf referans
init(name: String) {
self.name = name
}
}
class Apartment {
let unit: String
unowned let tenant: Person // sahip olmayan referans
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
Burada, Person ve Apartment birbirine referans verir, ancak bir referans zayıftır, bu da bellek sızıntılarını önler.
Referans döngüleri kırılmazsa, nesneler dış referanslar olmasa bile bellekte kalır ve bu da bellek sızıntılarına yol açar.