Utilizarea debuggerului graficului de memorie în XCode este o modalitate eficientă de a identifica ciclurile de reținere în aplicațiile MVVMcross. Iată un ghid pas cu pas despre cum să o faceți:
Introducere în debuggerul graficului de memorie
Debuggerul graficului de memorie este un instrument puternic în XCode care îi ajută pe dezvoltatori să identifice scurgerile de memorie și să păstreze ciclurile prin vizualizarea relațiilor de obiect în memorie. Oferă o imagine a stării de memorie curente, care arată ce obiecte sunt păstrate și cum sunt referite.
pași pentru identificarea ciclurilor de reținere
1. Executați aplicația: Începeți să rulați aplicația MVVMCross în XCODE. Asigurați -vă că testați partea specifică a aplicației în care suspectați că ar putea apărea un ciclu de reținere.
2. Deschideți debuggerul graficului de memorie: După ce aplicația dvs. rulează, deschideți depanatorul de grafic de memorie făcând clic pe butonul cu trei noduri situat între butoanele de debugger vizual și locația simulatorului din bara de instrumente XCode. Aceasta va capta o imagine de memorie a stării actuale a aplicației.
3. Analizați instantaneul de memorie: În panoul din stânga debuggerului graficului de memorie, veți vedea o listă de obiecte în prezent în memorie, împreună cu numărul de cazuri din fiecare clasă. Căutați obiecte care nu ar trebui să fie acolo sau care să aibă un număr neașteptat de mare de cazuri.
4. Identificați ciclurile de reținere: selectați un obiect din panoul din stânga pentru a vizualiza graficul său de referință. Graficul va arăta referințe puternice ca linii îndrăznețe și referințe necunoscute (care ar putea fi slabe sau puternice) ca linii gri deschis. Un ciclu de reținere este indicat de o buclă din grafic în care obiectele se referă reciproc într -un mod care să le împiedice să fie tratat.
5. Navigați graficele obiectului: Pentru a urmări sursa unui ciclu de reținere, poate fi necesar să navigați prin mai multe grafice ale obiectului. Începeți cu obiectul scurs și urmați referințele înapoi pentru a găsi obiectul părinte care îl păstrează.
6. Inspectați detaliile obiectului: Când faceți clic pe un nod din grafic, un panou de inspecție va oferi informații detaliate despre obiect, inclusiv proprietățile și relațiile sale. Acest lucru vă poate ajuta să înțelegeți de ce se păstrează un obiect.
7. Repetați fluxurile de miez: Pentru a confirma un ciclu de reținere, repetați fluxul de miez sau caracteristica în aplicația dvs. de mai multe ori, luând instantanee de memorie după fiecare iterație. Dacă numărul de cazuri ale unui anumit obiect crește în timp, acesta ar putea indica un ciclu de reținere.
8. Fixați ciclul de reținere: După ce ați identificat sursa ciclului de reținere, îl puteți remedia schimbând referințe puternice la referințe slabe sau neobișnuite, după caz. De exemplu, în închideri, folosiți `[Sinele slab]` pentru a evita să -l capturați puternic pe sine.
Scenarii de ciclu de reținere comună în mvvmcross
În aplicațiile MVVMCross, ciclurile de reținere apar adesea din cauza unor referințe puternice între modelele de vedere și vizualizări sau din cauza închiderilor care captează puternic modele de vedere sau vizualizări. De exemplu, dacă un model de vizualizare păstrează o referință puternică la o vedere și vizualizarea păstrează, de asemenea, o referință puternică la modelul de vizualizare, niciuna nu poate fi tratată.
Pentru a preveni astfel de cicluri, asigurați -vă că modelele dvs. de vizualizare sunt curățate corespunzător atunci când vizualizările sunt respinse. Utilizați metode de ciclu de viață furnizate de MVVMcross, cum ar fi `disperat ()`, pentru a elibera resurse și a rupe orice referințe inutile.
Urmărind acești pași și înțelegând modul în care relațiile obiect sunt vizualizate în debuggerul graficului de memorie, puteți identifica și repara în mod eficient ciclurile de reținere în aplicațiile dvs. MVVMcross.
Citări:[1] https://doordash.engineering/2019/05/22/ios-memory-heaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
]
[3] https://www.tothenew.com/blog/memory-lek-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-to-find-memory-heaks/
[7] https://moldstud.com/articles/P-Swift-Memory-Management-tips-For-Retain-Cycle-issues
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/