Bellek yönetimli programlama dillerinde referans tutma döngüsü nasıl başlatılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Swift veya iOS'ta Objective-C gibi otomatik hafıza yönetimi yapan programlama dillerinde, retain cycle (tutma döngüsü) iki veya daha fazla nesnenin birbirini güçlü referanslar aracılığıyla tutması durumudur; bu, çöp toplayıcı veya ARC (Otomatik Referans Sayımı) tarafından bu nesnelerin serbest bırakılmamasına neden olur.
Retain cycle, örneğin, A nesnesinin B nesnesine güçlü bir referans içerdiği ve B nesnesinin de A nesnesine güçlü bir referans içerdiği durumlarda başlar. Bu, her iki nesnenin referans sayacının hiçbir zaman sıfıra ulaşmamasıyla sonuçlanır.
Bunların önlenmesi için:
- Zayıf referanslar (
weak) — referans sayacını artırmaz ve nesne silindiğinde otomatik olarak nil olur. - Güvenli referanslar (
unowned) — referans sayacını artırmaz, ancak otomatik olarak nil olmaz; nesnenin daha uzun süre var olacağı garanti edildiğinde kullanılır.
Örnek:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // döngüyü önlemek için zayıf referans
}
Bu şekilde, retain cycle karşılıklı güçlü referanslar aracılığıyla başlatılır ve zayıf veya unowned referanslar kullanılarak döngü kırılır.