Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Πώς μπορώ να χρησιμοποιήσω το πρόγραμμα εντοπισμού σφαλμάτων μνήμης για να εντοπίσω τους κύκλους διατήρησης σε εφαρμογές MVVMCross


Πώς μπορώ να χρησιμοποιήσω το πρόγραμμα εντοπισμού σφαλμάτων μνήμης για να εντοπίσω τους κύκλους διατήρησης σε εφαρμογές MVVMCross


Η χρήση του εντοπισμού σφαλμάτων γραφήματος μνήμης στο XCode είναι ένας αποτελεσματικός τρόπος για τον εντοπισμό κύκλων διατήρησης σε εφαρμογές MVVMCross. Ακολουθεί ένας οδηγός βήμα προς βήμα για το πώς να το κάνετε:

Εισαγωγή στο πρόγραμμα εντοπισμού σφαλμάτων μνήμης

Το Debugger Graph Memory είναι ένα ισχυρό εργαλείο σε Xcode που βοηθά τους προγραμματιστές να εντοπίσουν διαρροές μνήμης και να διατηρούν τους κύκλους απεικονίζοντας τις σχέσεις αντικειμένων στη μνήμη. Παρέχει ένα στιγμιότυπο της τρέχουσας κατάστασης μνήμης, δείχνοντας ποια αντικείμενα διατηρούνται και πώς αναφέρονται.

Βήματα για τον εντοπισμό κύκλων διατήρησης

1. Εκτελέστε την εφαρμογή σας: Ξεκινήστε εκτελώντας την εφαρμογή MVVMCROSS στο Xcode. Βεβαιωθείτε ότι δοκιμάζετε το συγκεκριμένο τμήμα της εφαρμογής όπου υποψιάζεστε ότι μπορεί να συμβεί ένας κύκλος συγκράτησης.

2. Ανοίξτε το Debugger Graph Memory: Μόλις εκτελεστεί η εφαρμογή σας, ανοίξτε το Debugger γραφήματος μνήμης κάνοντας κλικ στο κουμπί τριών κόμβων που βρίσκεται μεταξύ του οπτικού εντοπισμού σφαλμάτων και των κουμπιών προσομοιωτή τοποθεσίας στη γραμμή εργαλείων του Xcode. Αυτό θα καταγράψει ένα στιγμιότυπο μνήμης της τρέχουσας κατάστασης της εφαρμογής σας.

3. Αναλύστε το στιγμιότυπο μνήμης: Στο αριστερό πλαίσιο του Debugger γραφήματος μνήμης, θα δείτε μια λίστα αντικειμένων που σήμερα στη μνήμη, μαζί με τον αριθμό των περιπτώσεων κάθε κατηγορίας. Αναζητήστε αντικείμενα που δεν πρέπει να είναι εκεί ή που έχουν απροσδόκητα υψηλό αριθμό περιπτώσεων.

4. Προσδιορίστε τους κύκλους διατήρησης: Επιλέξτε ένα αντικείμενο από τον αριστερό πίνακα για να δείτε το γράφημα αναφοράς του. Το γράφημα θα εμφανίζει ισχυρές αναφορές ως έντονες γραμμές και άγνωστες αναφορές (οι οποίες θα μπορούσαν να είναι αδύναμες ή ισχυρές) ως ανοιχτό γκρι γραμμές. Ένας κύκλος συγκράτησης υποδεικνύεται από ένα βρόχο στο γράφημα όπου τα αντικείμενα αναφέρονται μεταξύ τους με τρόπο που τους εμποδίζει να προκληθούν.

5. Πλοηγηθείτε σε γραφήματα αντικειμένων: Για να εντοπίσετε την πηγή ενός κύκλου συγκράτησης, ίσως χρειαστεί να περιηγηθείτε σε γραφήματα πολλαπλών αντικειμένων. Ξεκινήστε με το αντικείμενο διαρροής και ακολουθήστε τις αναφορές προς τα πίσω για να βρείτε το γονικό αντικείμενο που το διατηρεί.

6. Επιθεωρήστε τις λεπτομέρειες του αντικειμένου: Όταν κάνετε κλικ σε έναν κόμβο στο γράφημα, ένας πίνακας επιθεώρησης θα παρέχει λεπτομερείς πληροφορίες σχετικά με το αντικείμενο, συμπεριλαμβανομένων των ιδιοτήτων και των σχέσεών του. Αυτό μπορεί να σας βοηθήσει να καταλάβετε γιατί διατηρείται ένα αντικείμενο.

7. Επαναλάβετε τις ροές πυρήνα: Για να επιβεβαιώσετε έναν κύκλο συγκράτησης, επαναλάβετε τη ροή ή τη λειτουργία πυρήνα στην εφαρμογή σας αρκετές φορές, λαμβάνοντας στιγμιότυπα μνήμης μετά από κάθε επανάληψη. Εάν ο αριθμός των περιπτώσεων ενός συγκεκριμένου αντικειμένου αυξάνεται με την πάροδο του χρόνου, θα μπορούσε να υποδεικνύει έναν κύκλο συγκράτησης.

8. Διορθώστε τον κύκλο συγκράτησης: Μόλις εντοπίσετε την πηγή του κύκλου συγκράτησης, μπορείτε να το διορθώσετε αλλάζοντας ισχυρές αναφορές σε αδύναμες ή μη περιουσιακές αναφορές όπου χρειάζεται. Για παράδειγμα, στα κλεισίματα, χρησιμοποιήστε `[αδύναμος εαυτός]` για να αποφύγετε τη λήψη `self` έντονα.

Κοινά σενάρια κύκλου διατήρησης στο MVVMCROSS

Στις εφαρμογές MVVMCross, οι κύκλοι διατήρησης συχνά εμφανίζονται λόγω ισχυρών αναφορών μεταξύ μοντέλων προβολής και προβολών ή λόγω κλεισίματος που καταγράφουν μοντέλα προβολής ή προβολές έντονα. Για παράδειγμα, εάν ένα μοντέλο προβολής έχει μια ισχυρή αναφορά σε μια άποψη και η προβολή έχει επίσης μια ισχυρή αναφορά πίσω στο μοντέλο προβολής, ούτε μπορεί να διαμορφωθεί.

Για να αποφύγετε αυτούς τους κύκλους, βεβαιωθείτε ότι τα μοντέλα προβολής σας καθαρίζονται σωστά όταν απορρίπτονται οι προβολές. Χρησιμοποιήστε τις μεθόδους κύκλου ζωής που παρέχονται από το MVVMCROSS, όπως το `εξαφανίστηκε (), για να απελευθερώσετε πόρους και να σπάσετε τυχόν περιττές αναφορές.

Ακολουθώντας αυτά τα βήματα και την κατανόηση του τρόπου με τον οποίο απεικονίζονται οι σχέσεις αντικειμένων στο πρόγραμμα εντοπισμού σφαλμάτων μνήμης, μπορείτε να εντοπίσετε και να διορθώσετε αποτελεσματικά τους κύκλους διατήρησης στις εφαρμογές MVVMCROSS.

Αναφορές:
[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-reretain-cycle-detection-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-andain-cycle-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-leak-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-tips-for-retain-cycle-issues
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/