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, amelyeketweakvagyunowned-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.