Sobes.tech
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, bunlar weak və ya unowned kimi 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.