Uporaba odpravljanja napak pomnilniškega grafa v XCode je učinkovit način za prepoznavanje zadržkov ciklov v aplikacijah MVVMcross. Tu je vodnik po korakih, kako to storiti:
Uvod v odpravljanje napak pomnilniškega grafa
Pomnilniški graf odpravljanje napak je močno orodje v XCode, ki razvijalcem pomaga prepoznati puščanje pomnilnika in ohraniti cikle z vizualizacijo objektnih odnosov v pomnilniku. Omogoča posnetek trenutnega stanja pomnilnika, ki prikazuje, kateri predmeti so zadržani in kako se sklicujejo.
Koraki za prepoznavanje zadržkov ciklov
1. Zaženite svojo aplikacijo: začnite z zaganjanjem aplikacije MVVMcross v XCode. Prepričajte se, da preizkušate določen del aplikacije, kjer sumite, da se lahko zgodi zadržani cikel.
2. Odprite odpravljalnik pomnilniškega grafa: Ko zaženete aplikacijo, odprite odpravljanje napak pomnilniškega grafa s klikom na gumb s tremi vozli, ki se nahaja med vizualnimi gumbi za odpravljanje napak in lokacijo v orodni vrstici XCode. To bo zajelo posnetek spomina trenutnega stanja vaše aplikacije.
3. Analizirajte posnetek pomnilnika: Na levi plošči pomnilniškega grafa Graph boste videli seznam predmetov, ki so trenutno v pomnilniku, skupaj s številom primerov vsakega razreda. Poiščite predmete, ki ne bi smeli biti tam ali imajo nepričakovano veliko primerov.
4. Opredelite zadržane cikle: Izberite predmet na levi plošči, da si ogledate njen referenčni graf. Graf bo prikazal močne reference kot drzne črte in neznane reference (ki bi lahko bile šibke ali močne) kot svetlo sive črte. Zadrževalni cikel je označen z zanko v grafu, kjer se predmeti medsebojno sklicujejo na način, ki preprečuje, da bi se ujemali.
5. Navigajte se grafov predmetov: Če želite izslediti vir zadržanega cikla, boste morda morali krmariti po več objektnih grafih. Začnite s puščenim predmetom in sledite referencam nazaj, da najdete matični objekt, ki ga ohranja.
6. Preglejte podrobnosti predmeta: Ko kliknete vozlišče v grafu, bo inšpekcijska plošča predložila podrobne informacije o predmetu, vključno z njenimi lastnostmi in odnosi. To vam lahko pomaga razumeti, zakaj se objekt zadržuje.
7. Ponovite jedro tokov: Če želite potrditi zadržani cikel, večkrat ponovite tok ali funkcijo jedra v svoji aplikaciji in po vsaki ponovitvi posnamete posnetke pomnilnika. Če se število primerov določenega predmeta sčasoma poveča, lahko kaže na zadržani cikel.
8. Popravite zadržani cikel: Ko ugotovite vir zadržanega cikla, ga lahko popravite tako, da spreminjate močne reference na šibke ali neomejene reference, kadar je to primerno. Na primer, v zapiranjih uporabite `[šibek self]`, da ne bi močno zajeli "self".
Skupni scenariji zadržkov v MVVMcross
V aplikacijah MVVMcross se zadržujejo cikli pogosto zaradi močnih referenc med modeli in pogledi ali zaradi zapiranja modelov ali pogledov. Na primer, če se model pogleda močno sklicuje na pogled in je pogled tudi močno sklicevanje na model pogleda, niti ga ni mogoče obravnavati.
Če želite preprečiti takšne cikle, se prepričajte, da se vaši modeli ogledov pravilno očistijo, ko se pogledi zavrnejo. Uporabite metode življenjskega cikla, ki jih ponuja MVVMcross, kot je "izginot ()", za sprostitev virov in prekinitev kakršnih koli nepotrebnih referenc.
Z upoštevanjem teh korakov in razumevanjem, kako se v odpravljalniku pomnilniškega grafa vizualizirajo odnosi objektov, lahko učinkovito prepoznate in popravite zadržane cikle v svojih aplikacijah MVVMcross.
Navedbe:[1] https://doordash.engineering/2019/05/22/ios-memory-loaks-and-retain-setection-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-leak-with-memory-pgraph-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-leaks/
[7] https://moldstud.com/articles/p-swift-memory-management-tips-for-retain-cikel
[8] https://www.mvvmcross.com/documentation/fundamentals/viewModel-lifecycle
[9] https://diggingInthecode.wordpress.com/2016/06/14/xamarin-performance-advices/