Sobes.tech
Junior — Middle

Hogyan lehet felismerni a memória retention cycle (megtartási ciklus) problémákat alkalmazásfejlesztés során?

sobes.tech MI

Válasz az MI-től

A megtartási ciklusok (retain cycles) akkor fordulnak elő, amikor két vagy több objektum egymásra mutat erős hivatkozásokkal, ami miatt a memória nem szabadul fel, még akkor sem, ha az objektumokra már nincs szükség.

Ezeknek a ciklusoknak a felismerésére iOS-en a következő módszerek használhatók:

  • Instruments eszköz (Leaks és Allocations): lehetővé teszi a memória szivárgások nyomon követését és azokat az objektumokat, amelyek a memóriában maradnak.
  • Xcode Memory Graph Debugger: vizualizálja az objektumokat és kapcsolataikat, segít megtalálni a megtartási ciklusokat.
  • Kód elemzése erős hivatkozások használatára zárványokban és delegáltakban: gyakran a ciklusok erős hivatkozások miatt alakulnak ki (closure), vagy delegáltakban, amelyeket weak vagy unowned-ként kell megjelölni.

Példa:

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

    func setup() {
        closure = {
            print(self) // erős hivatkozás self-re
        }
    }
}

Itt a ViewController tartja a closure-t, és a closure tartja a self-t — ciklust hozva létre. Ennek elkerülése érdekében [weak self]-t használnak:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

Így a megtartási ciklusok felismerése profilozó eszközök és a kód alapos elemzése révén történik, figyelembe véve az erős hivatkozásokat.