MVVMCROSSissa, kuten muissa kehyksissä, valinta heikonReferenssin ja strongreferenssin välillä on ratkaisevan tärkeä muistin hallinnassa ja muistivuotojen estämisessä. Tässä on yksityiskohtainen selitys eroista ja siitä, miten niitä sovelletaan MVVMCrossin yhteydessä:
Vahvat viitteet
** Vahvat viitteet ovat oletustyyppi useimmissa ohjelmointikielissä, mukaan lukien C#. Kun objektiin viitataan voimakkaasti, roskien keräilijä ei voi kerätä sitä ennen kuin kaikki vahvat viitteet esineeseen poistetaan. Tämä tarkoittaa, että niin kauan kuin objektiin on ainakin yksi vahva viittaus, se pysyy muistissa.
MVVMCROSS: ssä vahvat viitteet voivat johtaa muistivuotoihin, jos niitä ei hallita oikein. Esimerkiksi, jos ViewModel pitää voimakkaan viitteen näkymään, ja näkymässä on myös vahva viittaus ViewModeliin, luodaan säilytysjakso. Tämä estää molemmat objektit jätteistä, jotka on kerätty, vaikka niitä ei enää tarvita.
Heikot viitteet
** Heikot viitteet toisaalta sallivat roskien keräilijän kerätä viitattu esine, jos vahvoja viitteitä ei ole. Tämä on erityisen hyödyllistä skenaarioissa, joissa haluat sallia esineen keräämisen, jos sitä ei enää tarvita, mutta haluat silti käyttää sitä, jos se sattuu olemaan käytettävissä.
MVVMCROSS: ssä rohkaistaan heikkoja viitteitä, jotta vältetään syklit näkymämallien ja näkymien välillä. Esimerkiksi, sen sijaan, että näkariviittaisivat voimakkaasti näkymää, voit käyttää heikkoa viitettä tai viestijärjestelmää kommunikoidaksesi niiden välillä. Tämä varmistaa, että näkymä voidaan kerätä roskaa, kun sitä ei enää tarvita, vaikka näkymämolli olisi edelleen olemassa.
Käytännöllinen esimerkki MVVMCrossissa
Harkitse skenaariota, jossa näkymämallin on ilmoitettava näkymä, kun jotkut tiedot ladataan. Yleinen lähestymistapa on käyttää näkymämallissa tapahtumaa, jonka näkymä tilaa. Jos näkymä kuitenkin tilaa voimakkaasti tähän tapahtumaan, se luo ViewModel -sivustosta vahvan viitteen näkymään, mikä voi estää näkymän kerätystä roskista.
Tämän välttämiseksi MVVMCross tarjoaa menetelmiä, kuten `heikkoherra", mikä antaa näkymän tilata ViewModel -tapahtumat heikosti. Tällä tavoin ViewModel ei pidä vahvaa viittausta näkymään estäen muistivuodot.
Ohjeet heikkojen viitteiden käyttämiseksi MVVMCrossissa
- Käytä heikkoja viitteitä näkymiin: Kun ViewMollin on oltava vuorovaikutuksessa näkymän kanssa, käytä heikkoja viitteitä tai viestijärjestelmiä välttääksesi syklien.
- Vältä vahvoja viittauksia näkymiin: Varmista, että ViewModels ei pidä vahvoja viittauksia näkymiin, jotta näkymät voidaan kerätä, kun niitä ei enää tarvita.
- Käytä viestintäjärjestelmiä: Harkitse MVVMCrossin kaltaisten viestijärjestelmien käyttöä, kuten MVVMCROSS "IMVXMESSENGER", ViewModels- ja näkemysten välillä luomatta vahvoja viitteitä.
Näiden ohjeiden noudattamisella voit hallita muistia tehokkaasti MVVMCross -sovelluksissa ja estää yleisiä ongelmia, kuten muistivuotoja.
Viittaukset:[1] https://stackoverflow.com/a/19379912
.
[3] https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/weak-references
[4] https://www.reddit.com/r/swift/comments/8ifwy9/ios_mvvm_breaking_retainer_cycle_between/
.
.
[7] https://putridparrot.com/blog/weakreferences-in-net/
.