Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ako môžem použiť debugger pamäte na identifikáciu cyklov udržania v aplikáciách MVVMCross


Ako môžem použiť debugger pamäte na identifikáciu cyklov udržania v aplikáciách MVVMCross


Použitie debuggeru pamäťového grafu v XCode je efektívny spôsob identifikácie cyklov udržania v aplikáciách MVVMCross. Tu je podrobný sprievodca, ako to urobiť:

Úvod do debuggeru Graph Memory Graph

Debugger pre pamäťový graf je výkonný nástroj v Xcode, ktorý vývojárom pomáha identifikovať úniky pamäte a udržať cykly vizualizáciou vzťahov objektov v pamäti. Poskytuje snímku aktuálneho stavu pamäte, ktorá ukazuje, ktoré objekty sú zachované a ako sa na ne odvoláva.

Kroky na identifikáciu cyklov zadržania

1. Spustite svoju aplikáciu: Spustite spustením aplikácie MVVMCross v XCode. Uistite sa, že testujete konkrétnu časť aplikácie, kde máte podozrenie, že môže dôjsť k cyklu udržania.

2. Otvorte debuggerový graf pamäte: Po spustení aplikácie otvorte ladenie grafu pamäte kliknutím na tlačidlo s tromi uzlami, ktoré sa nachádza medzi vizuálnym ladením a tlačidlami simulátora polohy v paneli nástrojov XCODE. Tým sa zachytí snímka pamäte aktuálneho stavu vašej aplikácie.

3. Analyzujte snímku pamäte: Na ľavom paneli Debugger Graph Memory sa zobrazí zoznam objektov, ktoré sú v súčasnosti v pamäti, spolu s počtom inštancií každej triedy. Vyhľadajte objekty, ktoré by tam nemali byť alebo ktoré majú neočakávane vysoký počet inštancií.

4. Identifikujte cykly zadržania: Vyberte objekt z ľavého panela, aby ste zobrazili jeho referenčný graf. Graf bude ukazovať silné odkazy ako odvážne čiary a neznáme odkazy (ktoré by mohli byť slabé alebo silné) ako svetlo šedé čiary. Cyklus udržiavania je označený slučkou v grafe, kde sa objekty navzájom odkazujú spôsobom, ktorý im bráni v umiestňovaní.

5. Navigajujte grafy objektov: Na vystopovanie zdroja cyklu zadržania možno budete musieť prejsť v viacerých objektových grafoch. Začnite s uniknutým objektom a postupujte podľa odkazov dozadu, aby ste našli rodičovský objekt, ktorý ho udržuje.

6. Skontrolujte podrobnosti o objekte: Keď kliknete na uzol v grafe, inšpekčný panel poskytne podrobné informácie o objekte vrátane jeho vlastností a vzťahov. To vám môže pomôcť pochopiť, prečo sa zachováva objekt.

9 Ak sa počet prípadov konkrétneho objektu v priebehu času zvýši, môže to naznačovať cyklus udržania.

8. Opravte cyklus udržiavania: Po identifikácii zdroja cyklu udržania ho môžete opraviť zmenou silných odkazov na slabé alebo nemotorné referencie, ak je to vhodné. Napríklad pri uzávierkách použite „[slabé ja]“, aby ste sa vyhli silne zachytávaniu „sebaprôb“.

Bežné scenáre cyklu udržania v MVVMCross

V aplikáciách MVVMCross sa cykly udržiavajú často v dôsledku silných odkazov medzi modelmi a pohľadmi alebo v dôsledku silných zachytávajúcich modelov alebo pohľadov na zachytávanie zobrazení. Napríklad, ak model pohľadu má silný odkaz na pohľad a pohľad tiež drží silnú referenciu späť na model pohľadu, nemôže sa tiež dohodnúť.

Aby ste zabránili takýmto cyklom, uistite sa, že pri prepustení výhľadov sú vaše modely zobrazenia správne vyčistené. Použite metódy životného cyklu poskytnuté spoločnosťou MVVMCross, ako napríklad „Zmiznuté ()`, na uvoľnenie zdrojov a prelomenie akýchkoľvek zbytočných odkazov.

Dodržiavaním týchto krokov a pochopením toho, ako sa vzťahy objektov vizualizujú v ladení pamäte Graph, môžete efektívne identifikovať a opraviť cykly udržiavania vo svojich aplikáciách MVVMCross.

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://forums.developer.apple.com/forums/thread/112268
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://www.donnywals.com/using-xcodes-memory-graph-find-memory-leaks/
[7] https://moldstud.com/articles/p-swift-memory-management-tips-for-retain-cycle-isessues
[8] https://www.mvvmcross.com/documentation/funmamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performace-advices/