Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Môže nástroj na pamäťový graf pomôcť identifikovať cykly zadržiavania v aplikáciách MVVMCross


Môže nástroj na pamäťový graf pomôcť identifikovať cykly zadržiavania v aplikáciách MVVMCross


Áno, nástroj na pamäťový graf v XCode môže pomôcť identifikovať cykly udržania v aplikáciách MVVMCross. Takto to funguje a ako sa dá aplikovať na MVVMCross:

Pochopenie cyklov

Udržujte cykly, keď dva alebo viac objektov majú navzájom silné odkazy, čo im bráni v tom, aby boli z pamäte vyriešené. Toto je spoločný problém vo vývoji iOS, najmä pri používaní delegátov alebo uzávierok, ktoré silne zachytávajú objekty.

Používanie nástroja na pamäťové grafy

1. Spustenie aplikácie a snímanie snímok: Ak chcete používať nástroj na pamäťové grafy, spustite svoju aplikáciu MVVMCross v XCode a prejdite jej základnými tokmi. Vezmite snímky pamäte v rôznych bodoch, najmä po navigácii od zobrazení alebo zobrazovacích modelov, ktoré by sa mali riešiť.

2. Analýza snímok: V ladení pamäťového grafu na ľavom paneli zobrazuje všetky objekty, ktoré sú momentálne v pamäti, spolu s počtom ich inštancie. Vyhľadajte objekty, ktoré mali byť riešené, ale sú stále prítomné. Zvýšenie počtu prípadov triedy v priebehu času môže naznačovať cyklus udržania.

3. Identifikácia cyklov zadržania: Vyberte objekt na ľavom paneli, aby ste si mohli zobraziť graf objektu. Graf ukazuje odkazy, ktoré udržiavajú objekt v pamäti. Bold čiary označujú silné odkazy, zatiaľ čo svetlo šedé čiary označujú neznáme odkazy (ktoré by mohli byť slabé alebo silné). Ak vidíte slučku, v ktorej sa objekty navzájom dôrazne odkazujú, je to pravdepodobne cyklus udržania.

4. Oprava cyklov zadržania: Po identifikácii cyklu udržania si prečítajte svoj kód a zistite, kde sa vytvárajú silné referencie. To často zahŕňa zmenu silných odkazov na slabé odkazy, najmä u delegátov alebo uzávierok.

Aplikácia na mvvmcross

V aplikáciách MVVMCross sú modely Zobraziť prísne spojené s životným cyklom zobrazení. To môže niekedy viesť k udržaniu cyklov, ak nie je správne spravované. Napríklad, ak model pohľadu má silný odkaz na pohľad a pohľad obsahuje tiež silný odkaz na model pohľadu (pravdepodobne prostredníctvom väzby), môže sa vyskytnúť cyklus udržiavania.

Aby ste tomu zabránili v MVVMCross, uistite sa, že akékoľvek referencie z pohľadov na zobrazenie modelov sú slabé. Použite metódy životného cyklu poskytnuté spoločnosťou MVVMCross (napríklad „Zmiznuté“) na vyčistenie akýchkoľvek silných odkazov, keď sú zamietnuté zobrazenia. Okrem toho použite nástroj na pamäťové grafy na overenie, či sa modely Zobraziť správne, keď sa ich pridružené zobrazenia odstránia z navigačného zásobníka.

Príklad identifikácie cyklov udržania v MVVMCross

Predpokladajme, že máte `myViewModel`, ktorý je viazaný na` myview`. Ak má `myView` silný odkaz na` myViewModel` a `myViewModel` má tiež silný odkaz na` myview` (možno prostredníctvom delegáta alebo uzavretia), videli by ste, že oba objekty zostávajú v pamäti aj po navigácii od `myview". Pomocou nástroja na graf pamäte by ste identifikovali tento cyklus a potom upravili svoj kód tak, aby v prípade potreby použili slabé referencie.

Podľa týchto krokov a pomocou nástroja na graf pamäte môžete efektívne identifikovať a vyriešiť cykly udržiavania v aplikáciách MVVMCross, čím sa zabezpečí, že využitie pamäte vašej aplikácie zostane efektívne a stabilné.

Citácie:
[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycle-detection-using-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-Memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-leak-with-memory-graph-debugger/
[4] https://paul-samuels.com/blog/2018/11/20/unit-testing-retain-cycles/
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://stackoverflow.com/questions/54040726/mvvmcross-android-appears-to-beep-hold-of-woldmodels-and-Disposing-we
[7] https://www.donnywals.com/using-xcodes-memory-graph --find-memory-leaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/Keding-where-retain-cycles-are-and-removing-theM