Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Instrumentul grafic de memorie poate ajuta la identificarea ciclurilor de reținere în aplicații MVVMcross


Instrumentul grafic de memorie poate ajuta la identificarea ciclurilor de reținere în aplicații MVVMcross


Da, instrumentul grafic de memorie din Xcode poate ajuta la identificarea ciclurilor de reținere în aplicațiile MVVMCross. Iată cum funcționează și cum poate fi aplicat pe MVVMcross:

Înțelegerea reținerii ciclurilor

Ciclurile de reținere apar atunci când două sau mai multe obiecte păstrează referințe puternice între ele, împiedicându -le să fie alocate de memorie. Aceasta este o problemă comună în dezvoltarea iOS, mai ales atunci când utilizați delegați sau închideri care captează puternic obiecte.

Utilizarea instrumentului de grafic de memorie

1. Rularea aplicației și luând instantanee: Pentru a utiliza instrumentul de grafic de memorie, rulați aplicația MVVMCross în Xcode și navigați prin fluxurile de bază ale sale. Luați instantanee de memorie în diferite puncte, mai ales după ce navigați departe de vizualizări sau vizualizați modelele care ar trebui tratate.

2. Analizarea instantaneelor: În debuggerul graficului de memorie, panoul din stânga afișează toate obiectele în prezent în memorie, împreună cu numărul lor de instanțe. Căutați obiecte care ar fi trebuit să fie tratate, dar sunt încă prezente. O creștere a numărului de cazuri ale unei clase în timp poate indica un ciclu de reținere.

3. Identificarea ciclurilor de reținere: selectați un obiect în panoul din stânga pentru a vizualiza graficul obiectului său. Graficul arată referințele care păstrează obiectul în memorie. Liniile îndrăznețe indică referințe puternice, în timp ce liniile gri deschis indică referințe necunoscute (care ar putea fi slabe sau puternice). Dacă vedeți o buclă în care obiectele se referă puternic, este probabil un ciclu de reținere.

4. Fixarea ciclurilor de reținere: După ce ați identificat un ciclu de reținere, examinați -vă codul pentru a afla unde sunt create referințele puternice. Adesea, aceasta implică schimbarea referințelor puternice la referințe slabe, în special în delegați sau închideri.

Aplicarea la MVVMcross

În aplicațiile MVVMcross, modelele de vizualizare sunt strâns cuplate la ciclul de viață al vizualizărilor. Acest lucru poate duce uneori la reținerea ciclurilor, dacă nu este gestionat corect. De exemplu, dacă un model de vizualizare păstrează o referință puternică la o vedere, iar vizualizarea ține, de asemenea, o referire puternică la modelul de vizualizare (poate printr -o legare), poate apărea un ciclu de reținere.

Pentru a evita acest lucru în MVVMcross, asigurați -vă că orice referințe de la vizualizări la vizualizare sunt slabe. Utilizați metode de ciclu de viață furnizate de MVVMCross (cum ar fi „dispariție”) pentru a curăța orice referințe puternice atunci când sunt respinse vizualizările. În plus, utilizați instrumentul de grafic de memorie pentru a verifica dacă modelele de vizualizare sunt tratate corect atunci când vizualizările asociate sunt eliminate din stiva de navigație.

Exemplu de identificare a ciclurilor de reținere în mvvmcross

Să presupunem că aveți un „MyViewModel` care este legat de un„ MyView ”. Dacă „MyView` ține o referință puternică la„ MyViewModel`, iar „MyViewModel` ține, de asemenea, o referire puternică la„ MyView` ”(poate printr -un delegat sau o închidere), ai vedea ambele obiecte rămase în memorie chiar și după ce navigați departe de„ MyView ”. Folosind instrumentul de grafic de memorie, ați identifica acest ciclu și apoi modificați codul dvs. pentru a utiliza referințe slabe acolo unde este necesar.

Urmărind acești pași și folosind instrumentul de grafic de memorie, puteți identifica și rezolva în mod eficient ciclurile de reținere în aplicațiile MVVMCross, asigurându -vă că utilizarea memoriei aplicației dvs. rămâne eficientă și stabilă.

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://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-be-keep-wold-of-iewmodels-and-never-dispoping-w
[7] https://www.donnywals.com/using-xcodes-memory-graph-to-find-memory-heaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/knowing-where-retain-cycles-are-and-removing-them