Ja, das Speichergraphen -Tool in Xcode kann dabei helfen, die Rückhaltezyklen in mvvmcross -Anwendungen zu identifizieren. So funktioniert es und wie es auf mvvmcross angewendet werden kann:
Verständnis beibehalten Zyklen
Reting -Zyklen treten auf, wenn zwei oder mehr Objekte starke Hinweise auf einander enthalten und verhindert, dass sie aus dem Gedächtnis versetzt werden. Dies ist ein häufiges Problem bei der iOS -Entwicklung, insbesondere wenn Delegierte oder Schließungen verwendet werden, die Objekte stark erfassen.
Verwenden des Speichergrafik -Tools
1. Ausführen der App und machen Sie Schnappschüsse: Verwenden Sie das Speicherdiagramm -Tool, führen Sie Ihre MVVMCross -Anwendung in Xcode aus und navigieren Sie durch seine Kernflüsse. Machen Sie Speicherschnappschüsse an verschiedenen Stellen, insbesondere nach dem Navigieren von Ansichten oder Ansichtsmodellen, die behandelt werden sollten.
2. Analyse von Snapshots: Im Speicherdiagramm -Debugger zeigt das linke Bedienfeld alle derzeit im Speicher im Speicher angezeigten Angaben an. Suchen Sie nach Objekten, die hätte verhandelt werden sollen, aber noch vorhanden sind. Eine Erhöhung der Anzahl der Fälle einer Klasse im Laufe der Zeit kann auf einen Rückhalteszyklus hinweisen.
3. Identifizieren von Rückhaltezyklen: Wählen Sie ein Objekt im linken Feld aus, um den Objektdiagramm anzuzeigen. Die Grafik zeigt die Referenzen, die das Objekt im Speicher halten. Fettdrucke Linien zeigen starke Referenzen an, während hellgraue Linien unbekannte Referenzen anzeigen (was schwach oder stark sein könnte). Wenn Sie eine Schleife sehen, in der sich Objekte stark beziehen, ist dies wahrscheinlich ein Rückhaltszyklus.
4. Fixierung von Haltungszyklen: Sobald Sie einen Rückhalteszyklus identifiziert haben, überprüfen Sie Ihren Code, um herauszufinden, wo die starken Referenzen erstellt werden. Dies beinhaltet häufig die Änderung starker Hinweise auf schwache Referenzen, insbesondere bei Delegierten oder Schließungen.
Bei MVVMcross bewerben Sie sich
In MVVMCross -Anwendungen sind Ansichtsmodelle eng mit dem Lebenszyklus der Ansichten gekoppelt. Dies kann manchmal dazu führen, dass Zyklen beibehalten werden, wenn sie nicht ordnungsgemäß verwaltet werden. Wenn beispielsweise ein Ansichtsmodell einen starken Hinweis auf eine Ansicht enthält und die Ansicht auch einen starken Hinweis auf das View -Modell (möglicherweise durch eine Bindung) enthält, kann ein Rückhaltszyklus auftreten.
Um dies in mvvmcross zu vermeiden, stellen Sie sicher, dass Referenzen von Ansichten zu Ansichtsmodellen schwach sind. Verwenden Sie Lebenszyklusmethoden von MVVMCross (wie "verschwunden"), um starke Referenzen zu beseitigen, wenn Ansichten abgewiesen werden. Verwenden Sie außerdem das Speichergrafik -Tool, um zu überprüfen, ob Ansichtsmodelle korrekt behandelt werden, wenn ihre zugehörigen Ansichten aus dem Navigationsstapel entfernt werden.
Beispiel für die Identifizierung von Rückhaltezyklen in mvvmcross
Angenommen, Sie haben einen "myviewModel", der an einen "myview" gebunden ist. Wenn "myview" einen starken Hinweis auf "myviewModel" und "myviewModel" enthält und auch einen starken Hinweis auf "MyView" hat (vielleicht durch einen Delegierten oder eine Schließung), würden Sie beide Objekte sehen, die auch nach dem Navigieren von "myview" weggeblieben sind. Mit dem Speichergrafik -Tool identifizieren Sie diesen Zyklus und ändern dann Ihren Code, um bei Bedarf schwache Referenzen zu verwenden.
Wenn Sie diese Schritte befolgen und das Speichergrafik -Tool verwenden, können Sie die Rückhaltezyklen in MVVMCross -Anwendungen effektiv identifizieren und auflösen, um sicherzustellen, dass die Speicherverwendung Ihrer App effizient und stabil bleibt.
Zitate:[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycle-dektection-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leak-and-retain-cycle-deTection-using-xcodes-memory-graph-debugger/
[3] https://www.thenew.com/blog/memory-leak-with-memory-graph-debugger/
[4] https://paul-samuels.com/blog/2018/11/20/unit-testing-retain-cycles/
[5] https://www.mvmcross.com/mvmcross-5-release/
[6] https://stackoverflow.com/questions/54040726/mvvmcross-android- tupears-to-be-Keep-Hold-of-viewmodels-and-never-disposing-w
[7] https://www.donnywals.com/using-xcodes-memory-graph-t-find-memory-leaks/
[8] https://www.mvvmcross.com/mvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/Know-where-retain-cycles-are-and-and-removing-tthem