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] ViewController və completion bağlaması arasında güclü döngünü qarşısını alır.