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ınweakveyaunownedyapı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.