Sobes.tech
Junior — Middle

Swift'te program yaparken oluşabilecek temel bellek sızıntısı türlerini sıralayabilir misin?

sobes.tech yapay zeka

AI'dan gelen yanıt

Swift'te temel bellek sızıntısı türleri, nesnelerin birbirini tutmasıyla ortaya çıkan döngüsel referanslar (retain cycles) ile ilgilidir ve ARC (Otomatik Referans Sayımı) belleği serbest bırakamaz. Ana durumlar:

  • Sınıflar arasında döngüsel referanslar: birbirine güçlü referanslar içeren iki sınıf nesnesi.
  • Self'i yakalayan kapanışlar: bir kapanış self'i [weak self] veya [unowned self] kullanmadan yakalarsa, bu bir döngüye yol açar.
  • Delegelerde güçlü referanslar: delegatör güçlü referans olarak tanımlanmışsa ve delegatör nesnesi geri referans veriyorsa.

Bir kapanışla sızıntı örneği:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // self'i güçlü referansla yakalar
        }
    }
}

Bunu önlemek için zayıf referanslar kullanılır:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

Bu şekilde, anahtar nokta güçlü referansları kontrol etmek ve gerekirse zayıf veya sahip olmayan referanslar kullanmaktır.