Sobes.tech
Junior — Middle

Uygulama geliştirme sırasında bellekteki retain cycle'ları nasıl tespit edebilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Retain cycle (tutma döngüleri), iki veya daha fazla nesne birbirine güçlü referanslar aracılığıyla bağlandığında ortaya çıkar ve bu da bellek serbest bırakılmadığı sürece nesneler artık gerekse bile bellek serbest kalmaz.

Bu döngüleri iOS'ta tespit etmek için aşağıdaki yöntemler kullanılabilir:

  • Instruments Aracı (Leaks ve Allocations): bellek sızıntılarını izler ve hangi nesnelerin bellekte kaldığını gösterir.
  • Xcode Memory Graph Debugger: nesneleri ve bağlantılarını görselleştirir, tutma döngülerini bulmaya yardımcı olur.
  • Koddaki güçlü referansların kullanımı üzerine analiz (closure ve delegeler): Döngüler genellikle güçlü referanslar nedeniyle oluşur (closure) veya delegelerde, bunların weak veya unowned yapılması gerekir.

Örnek:

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

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

Burada, ViewController closure'u tutar ve closure self'yi tutar — bu bir döngü oluşturur. Bunu önlemek için [weak self] kullanılır:

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

Bu şekilde, tutma döngülerinin tespiti profil araçları ve kodun dikkatli analiziyle güçlü referanslar birleştirilir.