Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ali lahko orodje za pomnilniški graf pomaga prepoznati zadrževanje ciklov v aplikacijah MVVMcross


Ali lahko orodje za pomnilniški graf pomaga prepoznati zadrževanje ciklov v aplikacijah MVVMcross


Da, orodje pomnilniškega grafa v XCode lahko pomaga prepoznati zadržane cikle v aplikacijah MVVMcross. Takole deluje in kako ga je mogoče uporabiti za mvvmcross:

Razumevanje ohrani cikle

Ostalni cikli se pojavijo, ko se dva ali več predmetov med seboj močno sklicuje, in preprečuje, da bi se ukvarjali s pomnilnikom. To je pogosto vprašanje pri razvoju iOS -a, zlasti pri uporabi delegatov ali zapiranj, ki močno zajemajo predmete.

Uporaba orodja za pomnilniški graf

1. Zagon aplikacije in posnetek posnetkov: Če želite uporabiti orodje za pomnilniški graf, zaženite aplikacijo MVVMcross v XCode in se pomaknite po njegovih jedrih. Posnemite spominske posnetke na različnih točkah, še posebej po krmarjenju po pogledih ali modelih ogledov, ki jih je treba obravnavati.

2. Analiza posnetkov: V pomnilniškem grafu odpravljanja napak na levi plošči prikazuje vse predmete, ki so trenutno v pomnilniku, skupaj z njihovimi štetji primerov. Poiščite predmete, ki bi jih morali obravnavati, vendar so še vedno prisotni. Povečanje števila primerov razreda skozi čas lahko kaže na zadržani cikel.

3. Identifikacija zadrževalnih ciklov: Izberite predmet na levi plošči, da si ogledate njegov graf objekta. Graf prikazuje reference, ki objekt ohranjajo v pomnilniku. Krepke črte označujejo močne reference, svetlo sive črte pa kažejo na neznane reference (ki bi lahko bile šibke ali močne). Če vidite zanko, kjer se predmeti močno sklicujejo, je verjetno zadržani cikel.

4. Pritrditev zadrževalnih ciklov: Ko ugotovite zadrževalni cikel, preglejte kodo in poiščite, kje se ustvarijo močne reference. Pogosto to vključuje spreminjanje močnih referenc na šibke reference, zlasti pri delegatih ali zapiranjih.

Prijava na mvvmcross

V aplikacijah MVVMcross so modeli ogledov tesno povezani z življenjskim ciklom stališč. To lahko včasih privede do zadrževanja ciklov, če jih ne upravlja pravilno. Na primer, če se model pogleda močno sklicuje na pogled in je pogled tudi močno sklicevanje na model pogleda (morda z vezavo), lahko pride do zadržanega cikla.

Da bi se temu izognili v MVVMcrossu, zagotovite, da so morebitne reference iz pogledov do modelov ogledov šibke. Uporabite metode življenjskega cikla, ki jih ponuja MVVMcross (na primer "izginot"), da očistite morebitne močne reference, ko se pogledi zavrnejo. Poleg tega uporabite orodje za pomnilniški graf, da preverite, ali se modeli ogledov pravilno obravnavajo, ko se njihovi pripadajoči pogledi odstranijo iz navigacijskega svežnja.

Primer identifikacije zadrževanja ciklov v mvvmcross

Recimo, da imate "myviewModel", ki je vezan na "myview". Če se `MyView` močno sklicuje na` MyViewModel`, "MyViewModel" pa se močno sklicuje na "MyView" (morda prek delegata ali zaprtja), bi videli, da oba predmeta ostaneta v pomnilniku tudi po krmarjenju stran od "MyView". Z orodjem za pomnilniški graf bi prepoznali ta cikel in nato spremenili kodo, da boste po potrebi uporabili šibke reference.

Če sledite tem korakom in z uporabo orodja za pomnilniški graf, lahko učinkovito prepoznate in razrešite zadržite cikle v aplikacijah MVVMcross, s čimer zagotovite, da bo uporaba pomnilnika vaše aplikacije ostala učinkovita in stabilna.

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://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-ep-hhold-of-viewModels-and-in-disposing-w
[7] https://www.donnywals.com/using-xcodes-memory-graph-to-find-memory-leaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/knowing-where-retain-cycles-are-in-removing-them