Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ar atminties grafiko įrankis gali padėti nustatyti „MVVMCross“ programų išlaikymo ciklus


Ar atminties grafiko įrankis gali padėti nustatyti „MVVMCross“ programų išlaikymo ciklus


Taip, „Xcode“ atminties grafiko įrankis gali padėti nustatyti „MVVMCross“ programų išlaikymo ciklus. Štai kaip tai veikia ir kaip tai galima pritaikyti MVVMCross:

Supratimas išlaikyti ciklus

Išlaikyti ciklus atsiranda tada, kai du ar daugiau objektų turi tvirtas nuorodas vienas į kitą, neleidžiant jiems išmatuoti atminties. Tai yra dažna „iOS“ kūrimo problema, ypač kai naudojami delegatai ar uždarymai, kurie stipriai fiksuoja objektus.

Naudojant atminties grafiko įrankį

1. Atlikite atminties momentinius vaizdus skirtinguose taškuose, ypač naršydami nuo rodinių ar rodinių modelių, kurie turėtų būti išskiriami.

2. Snapsų analizė: atminties grafiko derinime kairiajame skydelyje pateikiami visi šiuo metu atmintyje esantys objektai kartu su jų egzempliorių skaičiumi. Ieškokite objektų, kurie turėjo būti tvarkomi, tačiau vis dar yra. Padidėjęs klasės atvejų skaičius laikui bėgant gali reikšti išlaikymo ciklą.

3. Sulaikymo ciklų identifikavimas: kairiajame skydelyje pasirinkite objektą, kad peržiūrėtumėte jo objekto diagramą. Diagrama rodo nuorodas, kurios saugo objektą atmintyje. Paryškintos linijos rodo stiprias nuorodas, o šviesiai pilkos linijos rodo nežinomas nuorodas (kurios gali būti silpnos ar stiprios). Jei matote kilpą, kur objektai tvirtai nurodo vienas kitą, greičiausiai tai yra išlaikymo ciklas.

4. Ištaisyti išlaikymo ciklus: Kai nustatysite išlaikymo ciklą, peržiūrėkite savo kodą, kad sužinotumėte, kur kuriamos stiprios nuorodos. Dažnai tai apima stiprių nuorodų į silpną nuorodas, ypač delegatų ar uždarymo, pakeitimą.

Taikymas MVVMCROSS

„MVVMCross“ programose rodinių modeliai yra glaudžiai susieti su rodinių cikle. Tai kartais gali sukelti ciklų išlaikymą, jei jis nebus tinkamai valdomas. Pvz., Jei rodinio modelis turi tvirtą nuorodą į vaizdą, o vaizdas taip pat turi tvirtą nuorodą į vaizdo modelį (galbūt per surišimą), gali atsirasti išlaikymo ciklas.

Norėdami to išvengti MVVMCROSS, įsitikinkite, kad bet kokios nuorodos iš peržiūrų iki vaizdo modelių yra silpni. Naudokite „MVVMCross“ (pvz., „Dingusi“) pateiktus gyvenimo ciklo metodus, kad išvalytumėte bet kokias stiprias nuorodas, kai vaizdai atmetami. Be to, naudokite atminties grafiko įrankį, kad patikrintumėte, ar peržiūros modeliai yra tinkamai išdėstyti, kai jų susiję vaizdai pašalinami iš navigacijos kamino.

Sulaikymo ciklų identifikavimo pavyzdys MVVMCross

Tarkime, kad turite „myViewModel“, kuris yra susijęs su „myView“. Jei „myView“ turi tvirtą nuorodą į „myViewModel“, o „myViewModel“ taip pat turi tvirtą nuorodą į „myView“ (galbūt per delegatą ar uždarymą), pamatytumėte abu objektus, likusius atmintyje net naršydami nuo „myView“. Naudodamiesi atminties grafiko įrankiu, nustatytumėte šį ciklą ir tada modifikuotumėte savo kodą, kad prireikus naudotumėte silpną nuorodas.

Atlikdami šiuos veiksmus ir naudodamiesi atminties grafiko įrankiu, galite efektyviai nustatyti ir išspręsti „MVVMCross“ programų išlaikymo ciklus, užtikrindami, kad jūsų programos atminties naudojimas išliks efektyvus ir stabilus.

Citatos:
[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordoh.com/blog/ios-memory-leaks-and-retain-cikle-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-reak-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-pears-to--neep-keep-hold-of-viewmodels ir never-sisposing-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-henter-retain-cycles-are-and-removing-ys