Sobes.tech
Junior — Middle

Kapançık (closure) içinde zayıf (weak) referans kullanılması gereken durumlar nelerdir?

sobes.tech yapay zeka

AI'dan gelen yanıt

iOS'ta kapanışlar (closures) içinde zayıf referanslar (weak), güçlü referans döngülerini (retain cycles) önlemek için kullanılır, bu da bellek sızıntılarına yol açabilir. Bu genellikle, kapanışın bir nesneyi (örneğin, self) yakalaması ve bu nesne tarafından tutulması durumunda geçerlidir, bu da karşılıklı güçlü referanslar oluşturur.

Kapanış içinde self'ye referans vermek için weak kullanın, eğer kapanış bir nesnenin özelliğinde saklanıyorsa veya fonksiyon çağrısından daha uzun yaşayabiliyorsa, nesnenin serbest bırakılmasından sonra bellekte tutulmasını önlemek için.

Swift'te örnek:

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

    func setup() {
        completion = { [weak self] in
            guard let self = self else { return }
            self.doSomething()
        }
    }

    func doSomething() {
        print("İşlem gerçekleştirildi")
    }
}

Burada, [weak self] ViewController ile completion kapanışı arasında güçlü döngüyü engeller.