Τα όργανα, μέρος του Xcode, έχουν σχεδιαστεί κυρίως για εφαρμογές iOS, MacOS, WatchOs και TVOS. Παρόλο που είναι απίστευτα αποτελεσματικό για την ανίχνευση διαρροών μνήμης σε αυτές τις πλατφόρμες χρησιμοποιώντας εργαλεία όπως το Debugger του Inter Instrument and Memory, η άμεση εφαρμογή του στις εφαρμογές MVVMCross είναι περιορισμένη. Το MVVMCross είναι ένα πλαίσιο cross-platform που επιτρέπει την ανάπτυξη για πολλαπλές πλατφόρμες, συμπεριλαμβανομένων των Android και iOS.
Ωστόσο, εάν αναπτύξετε μια εφαρμογή MVVMCROSS για iOS, μπορείτε να χρησιμοποιήσετε όργανα για να παρακολουθείτε διαρροές μνήμης σε πραγματικό χρόνο για το τμήμα iOS της εφαρμογής σας. Εδώ είναι πώς:
Χρήση οργάνων για εφαρμογές iOS MVVMCROSS
1. Εργαλεία εκτόξευσης: Ξεκινήστε ανοίγοντας το έργο σας στο Xcode και επιλέγοντας το προϊόν> Προφίλ. Αυτό θα ξεκινήσει τα μέσα.
2. Επιλέξτε το πρότυπο διαρροών: Στο παράθυρο διαλόγου επιλογής προτύπου, επιλέξτε το πρότυπο διαρροών στο τμήμα μνήμης. Αυτό το πρότυπο έχει σχεδιαστεί ειδικά για την ανίχνευση διαρροών μνήμης.
3. Εκτελέστε την εφαρμογή σας: Κάντε κλικ στο κουμπί εγγραφής για να ξεκινήσετε την προφίλ σας. Αλληλεπιδράστε με την εφαρμογή σας όπως κανονικά θα εστιάζετε ειδικά σε περιοχές όπου υποψιάζεστε ότι οι διαρροές μνήμης ενδέχεται να εμφανιστούν.
4. Αναλύστε τα αποτελέσματα: Αφού ολοκληρώσετε τις αλληλεπιδράσεις σας, σταματήστε την εγγραφή. Τα όργανα θα εμφανίζουν ένα γράφημα που θα εμφανίζει τη χρήση μνήμης με την πάροδο του χρόνου. Εάν υπάρχουν διαρροές μνήμης, θα δείτε αύξηση της χρήσης μνήμης χωρίς να μειώνεται αντίστοιχες όταν τα αντικείμενα πρέπει να προκληθούν. Κάτω από το γράφημα, θα βρείτε μια λίστα με διαρροή μπλοκ μνήμης μαζί με ίχνη στοίβας που υποδεικνύουν πού διατέθηκαν οι διαρροές.
5. Προσδιορίστε και διορθώστε διαρροές: Χρησιμοποιήστε τα ίχνη στοίβας για να εντοπίσετε την πηγή των διαρροών στον κωδικό σας. Τα συνηθισμένα ζητήματα περιλαμβάνουν τους κύκλους διατήρησης, όπου τα αντικείμενα διατηρούνται ισχυρές αναφορές μεταξύ τους, αποτρέποντας την παρακέντηση. Ο καθορισμός αυτών περιλαμβάνει τη διάσπαση των κύκλων συγκράτησης, συχνά χρησιμοποιώντας αδύναμες ή μη καταιγισμένες αναφορές.
Περιορισμοί για πλατφόρμες μη-IOS
Για εφαρμογές MVVMCROSS που στοχεύουν πλατφόρμες διαφορετικές από το iOS (όπως το Android), τα όργανα δεν μπορούν να χρησιμοποιηθούν άμεσα. Αντ 'αυτού, θα πρέπει να χρησιμοποιήσετε εργαλεία ειδικά για την πλατφόρμα για ανίχνευση διαρροής μνήμης:
- Android: Χρησιμοποιήστε εργαλεία όπως το Profiler Memory του Android Studio ή οι βιβλιοθήκες τρίτου μέρους όπως το LEVECANARY.
- Άλλες πλατφόρμες: Χρησιμοποιήστε εργαλεία ή βιβλιοθήκες ειδικά για την πλατφόρμα.
Συνοπτικά, ενώ τα όργανα είναι ιδιαίτερα αποτελεσματικά για την ανίχνευση διαρροών μνήμης σε εφαρμογές iOS, συμπεριλαμβανομένων εκείνων που κατασκευάστηκαν με MVVMCross για iOS, δεν ισχύει για μη-IOS πλατφόρμες. Για την ανάπτυξη μεταξύ των πλατφορμών, πρέπει να χρησιμοποιήσετε εργαλεία ειδικά για κάθε πλατφόρμα προορισμού.
Αναφορές:[1] https://www.netguru.com/blog/what-are-ios-memory-leaks-and-how-to-detect-them
[2] https://www.reddit.com/r/rust/comments/kpsgin/how_to_find_a_memory_leak_in_a_rust_program/
[3] https://stackoverflow.com/questions/38592689/memory-leak-check-in-real-time-application
[4] https://www.kodeco.com/books/swiftui-cookbook/v1.0/chapters/9-finding-memory-leaks-using-instruments
[5] https://stackoverflow.com/questions/27008035/mvvmcross-memory-leak-because-of-not-disposed-viewmodels
[6] https://forums.ni.com/t5/labview/get-object-memory-leak/td-p/4276905
[7] https://forums.developer.apple.com/forums/thread/770061
[8] https://github.com/mvvmcross/mvvmcross/issues/2884