Ja, het geheugengrafiektool in Xcode kan helpen bij het identificeren van cycli in MVVMCross -toepassingen. Hier is hoe het werkt en hoe het kan worden toegepast op MVVMCross:
begrip behoudt cycli
Bewaar cycli treden op wanneer twee of meer objecten sterke verwijzingen naar elkaar hebben, waardoor ze niet kunnen worden geheugen. Dit is een veel voorkomend probleem bij de ontwikkeling van iOS, vooral bij het gebruik van afgevaardigden of sluitingen die objecten sterk vastleggen.
De tool van de geheugengrafiek gebruiken
1. De app uitvoeren en snapshots maken: om de geheugengrafiektool te gebruiken, voert u uw MVVMCross -toepassing uit in Xcode en navigeer door de kernstromen. Neem geheugen snapshots op verschillende punten, vooral na het navigeren van weergaven of weergavemodellen die moeten worden geëtlloceerd.
2. Snapshots analyseren: in de debugger van de geheugengrafiek wordt het linkerpaneel alle objecten weergegeven die momenteel in het geheugen zijn, samen met hun instantietellingen. Zoek naar objecten die hadden moeten worden gesloten maar nog steeds aanwezig zijn. Een toename van het aantal instanties van een klasse in de loop van de tijd kan een behoudcyclus aangeven.
3. Identificeren van cycli: selecteer een object in het linkerpaneel om de objectgrafiek te bekijken. De grafiek toont de referenties die het object in het geheugen houden. Vetgedrukte lijnen geven sterke referenties aan, terwijl lichtgrijze lijnen onbekende referenties aangeven (die zwak of sterk kunnen zijn). Als u een lus ziet waar objecten sterk naar elkaar verwijzen, is dit waarschijnlijk een behoudcyclus.
4. Cycli vaststellen: Nadat u een behoudcyclus hebt geïdentificeerd, bekijkt u uw code om te vinden waar de sterke referenties worden gemaakt. Dit gaat vaak om het veranderen van sterke verwijzingen naar zwakke referenties, vooral in afgevaardigden of sluitingen.
van toepassing op mvvmcross
In MVVMCross -toepassingen zijn de weergavemodellen strak gekoppeld aan de levenscyclus van weergaven. Dit kan soms leiden tot het behouden van cycli als het niet correct wordt beheerd. Als een weergavemodel bijvoorbeeld een sterke verwijzing naar een weergave bevat en de weergave ook een sterke verwijzing naar het weergavemodel (misschien door een binding) bevat, kan een behoudcyclus optreden.
Om dit in MVVMCross te voorkomen, moet je ervoor zorgen dat alle referenties van weergaven om modellen te bekijken zwak zijn. Gebruik levenscyclusmethoden die worden geleverd door MVVMCross (zoals 'verdwenen') om sterke referenties op te ruimen wanneer weergaven worden afgewezen. Gebruik bovendien het geheugengrafiektool om te verifiëren dat weergavemodellen correct worden geëlceerd wanneer hun bijbehorende weergaven worden verwijderd uit de navigatiestapel.
Voorbeeld van het identificeren van behoudcycli in mvvmcross
Stel dat je een `myViewModel 'hebt die gebonden is aan een` myview'. Als `MyView` een sterke verwijzing naar` MyViewModel` bevat, en `MyViewModel` ook een sterke verwijzing naar` myview` (misschien via een afgevaardigde of een sluiting), zou je beide objecten in het geheugen zien blijven, zelfs nadat je navigeert, zelfs na navigeren weg van `myview`. Met behulp van de geheugengrafiektool zou u deze cyclus identificeren en vervolgens uw code aanpassen om zwakke referenties te gebruiken waar nodig.
Door deze stappen te volgen en de geheugengrafiektool te gebruiken, kunt u cycli in MVVMCross -toepassingen effectief identificeren en oplossen, zodat u ervoor zorgt dat het geheugengebruik van uw app efficiënt en stabiel blijft.
Citaten:[1] https://doordash.engineering/2019/05/22/ios-memory-delak-and-retain-cycle-detection-using-xcodes-memory-graph-Debugger/
[2] https://careeratdoordash.com/blog/ios-memory-and- en-tretain-cycle-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-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-appears-to-be-hold-of-viewModels-and-never-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-and-removing-them