Sobes.tech
Middle — Middle+

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.