MVVMcrossi, nagu ka teistes raamistike puhul, on mälu haldamiseks ja mälulekke vältimiseks ülioluline valik nõrkade ja tugeva referentsi kasutamise vahel. Siin on üksikasjalik seletus erinevuste kohta ja kuidas need kehtivad MVVMCROSSi kontekstis:
Tugevad viited
** Tugevad viited on enamikus programmeerimiskeeltes, sealhulgas C#, vaiketüüp. Kui objektile viidatakse tugevalt, ei saa prügikoguja seda koguda enne, kui kõik tugevad viited objektile eemaldatakse. See tähendab, et seni, kuni objektile on vähemalt üks tugev viide, jääb see mällu.
MVVMcrossis võivad tugevad viited põhjustada mälulekkeid, kui neid ei hallata. Näiteks kui ViewModelil on tugev viide vaatele ja vaade on ka tugev viide ViewModelile, luuakse säilitutsükkel. See hoiab ära mõlema objekti kogumise prügi isegi siis, kui neid enam ei vajata.
nõrgad viited
** Nõrgad viited seevastu võimaldavad prügikogujal koguda viidatud objekti, kui tugevaid viiteid pole. See on eriti kasulik stsenaariumide korral, kus soovite lubada prügi koguda, kui seda enam pole, kuid soovite sellele siiski juurde pääseda, kui see juhtub saadaval.
MVVMcrossis julgustatakse nõrkade viidete kasutamist, et vältida vaatetsüklite ja vaadete vahelist tsüklit. Näiteks selle asemel, et viewModel oleks tungivalt vaade, võite nende vahel suhelda nõrga viite või sõnumsidesüsteemi. See tagab, et vaadet saab prügi koguda, kui seda enam pole vaja, isegi kui vaatemodel on endiselt olemas.
praktiline näide MVVMcrossis
Mõelge stsenaariumile, kus ViewModel peab mõne andmete laadimisel vaadet teavitama. Levinud lähenemisviis on kasutada sündmust ViewModelis, mida vaade nõustub. Kui vaade sellele sündmusele tugevalt nõustub, loob see ViewModelist tagasi vaatenurka, mis võib takistada vaate prügi kogumist.
Selle vältimiseks pakub MVVMcross selliseid meetodeid nagu "nõrgadSubscribe", mis võimaldab vaadet tellida ViewModeli sündmusi nõrgalt. Nii ei pea ViewModelit vaatele tugevat viidet, takistades mälulekkeid.
juhised nõrkade viidete kasutamiseks mvvmcrossis
- Kasutage vaadete nõrku viiteid: kui vaatemodel peab vaatega suhtlema, kasutage tsüklite vältimiseks nõrku viiteid või sõnumside süsteeme.
- Vältige tugevaid viiteid vaadetele: veenduge, et vaatemodellid ei oleks tugevad viited vaadetele, et võimaldada vaateid prügi koguda, kui neid enam ei vajata.
- Kasutage sõnumside süsteeme: kaaluge sõnumisüsteemide kasutamist, näiteks MVVMCROSSi `imvxmessenger`, et suhelda vaademodellide ja vaadete vahel ilma tugevaid viiteid loomata.
Neid juhiseid järgides saate MVVMcrossi rakendustes mälu tõhusalt hallata ja takistada tavalisi probleeme nagu mälulekked.
Tsitaadid:[1] https://stackoverflow.com/a/19379912
]
]
]
[5] https://stackoverflow.com/questions/40966271/weak-reference-and-strong-reference
]
]
]