Sobes.tech
Junior — Middle

Kas sukelia atminties nutekėjimo atsiradimą programose?

sobes.tech AI

Atsakymas iš AI

Programose atminties nutekėjimai atsiranda, kai atmintis, skirta objektams ar duomenims, nėra laisvinama po to, kai ji nebėra reikalinga. iOS dažnai tai siejama su:

  • Objektų tarpusavio ciklinėmis nuorodomis (retention ciklais), ypač naudojant ARC (Automatinį nuorodų skaičiavimą). Pavyzdžiui, kai du objektai vienas kitą nuorodo stipriomis nuorodomis, jie nėra atlaisvinami.
  • Netinkamu užbaigimo (closure) naudojimu, kurie fiksuoja self stipriomis nuorodomis.
  • Išteklių, tokių kaip laikmačiai, stebėtojai ar failų aprašytojai, nepašalinimu.

Pavyzdys su retention ciklu ir užbaigimu:

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

    func setup() {
        closure = {
            print(self) // self stipriai fiksuojamas, sukuriant ciklą
        }
    }
}

Norint išvengti nutekėjimų, naudojamos silpnos (weak) arba nevaldomos (unowned) nuorodos užbaigimuose ir užtikrinamas teisingas objektų gyvavimo ciklo valdymas.