Sobes.tech
Junior — Middle

Kaip aptinkate ir šalinate atminties nutekėjimus savo programose?

sobes.tech AI

Atsakymas iš AI

Norint aptikti atminties nutekėjimus iOS programose, dažnai naudoju Xcode įrankius, tokius kaip Instruments su Leaks ir Allocations profiliais.

  1. Paleidžiu programą per Instruments ir stebiu, ar realiu laiku atsiranda nutekėjimų.
  2. Analizuoju objektus, kurie nėra išlaisvinami, ir jų išlaikymo grandines (retaining cycles).
  3. Dažnai nutekėjimai atsiranda dėl stiprių ciklinių nuorodų, pavyzdžiui, tarp objektų ar uždarymų, todėl tikrinu weak ir unowned nuorodų naudojimą.

Pavyzdys, kaip pašalinti retaining cycle uždaryme:

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

    func setup() {
        closure = { [weak self] in
            self?.doSomething()
        }
    }

    func doSomething() {
        print("Veiksmas")
    }
}

Čia [weak self] naudojimas užkerta kelią stipriam cikliniam išlaikymui tarp objekto ir uždarymo.

Taip pat naudinga naudoti Xcode statinį analizatorių (Product -> Analyze), kad būtų galima nustatyti galimus atminties problemas.