„Xcode“ atminties grafiko naudojimas yra veiksmingas būdas nustatyti „MVVMCross“ programų išlaikymo ciklus. Čia yra žingsnis po žingsnio vadovas, kaip tai padaryti:
Įvadas į atminties grafiko derinimo įrenginį
Atminties grafiko derinimas yra galingas „Xcode“ įrankis, padedantis kūrėjams nustatyti atminties nutekėjimą ir išlaikyti ciklus, vizualizuojant objektų ryšius atmintyje. Tai pateikia dabartinės atminties būsenos vaizdą, parodantį, kurie objektai yra išsaugoti ir kaip jie nurodomi.
žingsniai, kaip nustatyti išlaikymo ciklus
1. Paleiskite savo programą: Pradėkite paleisti „MVVMCross“ programą „XCode“. Įsitikinkite, kad išbandote konkrečią programos dalį, kurioje įtariate, kad gali atsirasti išlaikymo ciklas.
2. Atidarykite atminties grafiko derinimo įrenginį: Kai tik veikia jūsų programa, atidarykite atminties grafiko derinimo įrenginį spustelėdami mygtuką Trijų mazgai, esantys tarp vaizdinio derinimo ir vietos simuliatoriaus mygtukų „XCode“ įrankių juostoje. Tai užfiksuos dabartinės programos būsenos atminties vaizdą.
3. Išanalizuokite atminties momentinį vaizdą: kairiajame atminties grafiko derinimo įrenginio skydelyje pamatysite šiuo metu atmintyje esančių objektų sąrašą kartu su kiekvienos klasės egzempliorių skaičiumi. Ieškokite objektų, kurie neturėtų būti ten arba kurie turi netikėtai didelį skaičių egzempliorių.
4. Nustatykite išlaikymo ciklus: kairiajame skydelyje pasirinkite objektą, kad peržiūrėtumėte jo nuorodos diagramą. Grafike bus rodomos stiprios nuorodos kaip drąsios linijos ir nežinomos nuorodos (kurios gali būti silpnos ar stiprios) kaip šviesiai pilkos linijos. Sulaikymo ciklą nurodo diagramos kilpa, kurioje objektai nurodo vienas kitą taip, kad būtų neleidžiama jiems išspręsti.
5. Naršykite objektų grafikus: Norėdami susekti išlaikymo ciklo šaltinį, gali tekti naršyti po kelis objektų grafikus. Pradėkite nuo nutekėjusio objekto ir sekite nuorodas atgal, kad rastumėte pagrindinį objektą, kuris jį išlaiko.
6. Apžiūrėkite objekto informaciją: spustelėjus diagramos mazgą, tikrinimo skydelyje pateikiama išsami informacija apie objektą, įskaitant jo savybes ir ryšius. Tai gali padėti suprasti, kodėl objektas išlaikomas.
7. Pakartokite pagrindinius srautus: Norėdami patvirtinti išlaikymo ciklą, kelis kartus pakartokite pagrindinį srautą ar funkciją savo programoje, po kiekvienos iteracijos atminties momentinius vaizdus. Jei tam tikro objekto atvejų skaičius laikui bėgant padidės, tai gali reikšti išlaikymo ciklą.
8. Ištaisykite išlaikymo ciklą: Kai nustatysite išlaikymo ciklo šaltinį, galite jį ištaisyti pakeisdami stiprias nuorodas į silpnas ar nepažeistas nuorodas, jei reikia. Pvz., Uždarykite, naudokite „[silpną save)`, kad išvengtumėte „savęs“ fiksavimo.
Bendras išlaikymo ciklo scenarijai MVVMCross
MVVMCROSS programose išlaikymo ciklai dažnai būna dėl tvirtų nuorodų tarp rodinių modelių ir rodinių arba dėl uždarymo, kuriame buvo stipriai užfiksuoti rodinių modeliai ar rodiniai. Pavyzdžiui, jei rodinio modelis turi tvirtą nuorodą į vaizdą, o rodinys taip pat turi tvirtą nuorodą į vaizdo modelį, nė vienas iš jų negali būti išskirtas.
Norėdami užkirsti kelią tokiems ciklams, įsitikinkite, kad jūsų vaizdų modeliai yra tinkamai išvalyti, kai vaizdai bus atmesti. Naudokite „MVVMCross“ pateiktus gyvenimo ciklo metodus, tokius kaip „Dingled ()“, kad išlaisvintumėte išteklius ir sulaužytumėte visas nereikalingas nuorodas.
Atlikdami šiuos veiksmus ir supratę, kaip objektų santykiai vizualizuojami atminties grafiko derinime, galite efektyviai nustatyti ir ištaisyti išlaikymo ciklus savo „MVVMCross“ programose.
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://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-typs-for-retain-ciccle-isuess
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/