Junior — Middle
Kapan ve nasıl zayıf referanslar kapanışlar içinde kullanılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
iOS'ta kapanışlar (closures) ile çalışırken, sıkça döngüsel referans sorunu ortaya çıkar; bir nesne kapanışı yakalar ve kapanış nesneyi yakaladığı zaman, bu durum bellek sızıntılarına yol açar. Bunu önlemek için, kapanışlar içinde zayıf referanslar (weak references) kullanılır.
Zayıf referans, nesnenin referans sayacını artırmaz, bu nedenle güçlü referanslar yoksa nesne serbest bırakılabilir.
Zayıf referansın kapanış içinde kullanımı örneği:
class ViewController {
var completionHandler: (() -> Void)?
func setup() {
completionHandler = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("İşlem gerçekleştirildi")
}
}
Kullanım durumları:
- Retain cycle'ı önlemek için kapanışın self veya diğer nesneleri yakalaması durumunda.
- Nesnenin, kapanış çalıştırılmadan önce yok edilebileceği asenkron işlemlerde.
Zayıf referansların kullanımı, belleği yönetmeye ve sızıntıları önlemeye yardımcı olur.