Sobes.tech
Junior — Middle

Qapama (closure) daxilində zəif (weak) istinad istifadə edilməlidir?

sobes.tech Süni İntellekt

AI-dan cavab

iOS daxilində bağlamalar (closures) içində zəif (weak) istinadlar güclü (strong) istinad döngülərini (retain cycles) qarşısını almaq üçün istifadə olunur, bu da yaddaş sızıntılarına səbəb ola bilər. Bu adətən, bağlama bir obyekti (məsələn, self) ələ keçirərsə və bu obyekt tərəfindən saxlanılırsa, qarşılıqlı güclü istinad yaranır.

Bağlamada self-ə istinad etmək üçün weak istifadə edin, əgər bağlama obyektin xüsusiyyətində saxlanılırsa və ya funksiya çağırışından daha uzun müddət yaşaya bilərsə, obyektin sərbəst buraxılmasından sonra yaddaşda saxlanmasını qarşısını almaq üçün.

Swift-də nümunə:

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

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

    func doSomething() {
        print("Əməliyyat yerinə yetirildi")
    }
}

Burada, [weak self] ViewControllercompletion bağlaması arasında güclü döngünü qarşısını alır.