Junior — Middle
Closure'larda self'e zayıf bir referans kullanmanın ne anlama geldiğini açıklayabilir misiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
iOS (Swift) içinde kapanışlarda (closures) self'e zayıf referans (weak reference) kullanmak, tutma döngülerini (retain cycles) önlemeye yardımcı olur, bu da bellek sızıntılarına yol açar. Bir kapanış, self'i güçlü bir referans olarak yakalarsa ve self bu kapanışı içeriyorsa, ikisi birbirini tutar ve bellek serbest bırakılmaz.
Örnek:
class MyClass {
var closure: (() -> Void)?
func setup() {
closure = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Action")
}
}
Burada, [weak self] ifadesi, kapanış içinde self'in zayıf bir referans olacağı anlamına gelir ve nesne yok edilirse, referans nil olur, bu da bellek sızıntısını önler.