Junior — Middle
Tətbiqlərin inkişafı zamanı yaddaşda saxlama dövrü (retain cycle) necə aşkar edilə bilər?
sobes.tech Süni İntellekt
AI-dan cavab
Yadda saxlama döngüləri (retain cycles) iki və ya daha çox obyekt bir-birinə güclü istinadlar vasitəsilə müraciət etdikdə baş verir, bu da yaddaşın sərbəst buraxılmamasına səbəb olur, hətta obyektlər artıq lazım olmasa belə.
Belə döngüləri iOS-da aşkar etmək üçün aşağıdakı metodlardan istifadə etmək olar:
- Instruments aləti (Leaks və Allocations): yaddaş sızmalarını izləməyə və hansı obyektlərin yaddaşda qaldığını görməyə imkan verir.
- Xcode Memory Graph Debugger: obyektləri və onların əlaqələrini vizuallaşdırır, yadda saxlayan döngüləri tapmağa kömək edir.
- Kodun güclü istinadların istifadəsinə dair analizi (closure və delegatlar): tez-tez döngülər güclü istinadlar səbəbindən yaranır (
closure) və ya delegatlar, bunlarweakvə yaunownedkimi qeyd edilməlidir.
Nümunə:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // güclü self tutma
}
}
}
Burada, ViewController closure-u saxlayır və closure self-i saxlayır — döngü yaranır. Bunu qarşısını almaq üçün [weak self] istifadə olunur:
closure = { [weak self] in
guard let self = self else { return }
print(self)
}
Bu şəkildə, yadda saxlayan döngülərin aşkarlanması profil vasitələri və kodun diqqətlə analizi ilə birləşdirilir.