เครื่องมือส่วนหนึ่งของ XCode ได้รับการออกแบบมาเป็นหลักสำหรับแอพพลิเคชั่น iOS, MacOS, WatchOS และ TVOS ในขณะที่มันมีประสิทธิภาพอย่างไม่น่าเชื่อสำหรับการตรวจจับการรั่วไหลของหน่วยความจำในแพลตฟอร์มเหล่านี้โดยใช้เครื่องมือเช่นเครื่องมือรั่วไหลของเครื่องมือและการดีบักกราฟหน่วยความจำ แต่แอปพลิเคชันโดยตรงไปยังแอปพลิเคชัน MVVMcross มี จำกัด MVVMCROSS เป็นเฟรมเวิร์กข้ามแพลตฟอร์มที่อนุญาตให้มีการพัฒนาสำหรับหลายแพลตฟอร์มรวมถึง Android และ iOS
อย่างไรก็ตามหากคุณกำลังพัฒนาแอปพลิเคชัน MVVMCROSS สำหรับ iOS คุณสามารถใช้เครื่องมือเพื่อติดตามการรั่วไหลของหน่วยความจำแบบเรียลไทม์สำหรับส่วน iOS ของแอปของคุณ นี่คือวิธี:
การใช้เครื่องมือสำหรับแอปพลิเคชัน iOS MVVMCROSS
1. เครื่องมือเปิดใช้งาน: เริ่มต้นด้วยการเปิดโครงการของคุณใน XCODE และเลือกผลิตภัณฑ์> โปรไฟล์ สิ่งนี้จะเปิดตัวเครื่องมือ
2. เลือกเทมเพลตการรั่วไหล: ในกล่องโต้ตอบการเลือกเทมเพลตเลือกเทมเพลตการรั่วไหลภายใต้ส่วนหน่วยความจำ เทมเพลตนี้ได้รับการออกแบบมาโดยเฉพาะเพื่อตรวจจับการรั่วไหลของหน่วยความจำ
3. เรียกใช้แอพของคุณ: คลิกปุ่มบันทึกเพื่อเริ่มทำโปรไฟล์แอปของคุณ โต้ตอบกับแอปของคุณตามปกติโดยเฉพาะอย่างยิ่งการมุ่งเน้นไปที่พื้นที่ที่คุณสงสัยว่าอาจมีการรั่วไหลของหน่วยความจำ
4. วิเคราะห์ผลลัพธ์: หลังจากเสร็จสิ้นการโต้ตอบของคุณให้หยุดการบันทึก เครื่องมือจะแสดงกราฟที่แสดงการใช้หน่วยความจำเมื่อเวลาผ่านไป หากมีการรั่วไหลของหน่วยความจำคุณจะเห็นการใช้หน่วยความจำเพิ่มขึ้นโดยไม่ลดลงเมื่อวัตถุควรจัดการ ด้านล่างกราฟคุณจะพบรายการบล็อกหน่วยความจำที่รั่วไหลออกมาพร้อมกับร่องรอยสแต็กที่ระบุว่ามีการจัดสรรการรั่วไหล
5. ระบุและแก้ไขการรั่วไหล: ใช้ร่องรอยสแต็กเพื่อค้นหาแหล่งที่มาของการรั่วไหลในรหัสของคุณ ปัญหาทั่วไปรวมถึงการรักษารอบที่วัตถุมีการอ้างอิงที่แข็งแกร่งซึ่งกันและกันป้องกันการจัดการ การแก้ไขสิ่งเหล่านี้เกี่ยวข้องกับการทำลายวงจรการรักษาบ่อยครั้งโดยใช้การอ้างอิงที่อ่อนแอหรือไม่ได้เป็นเจ้าของ
ข้อ จำกัด สำหรับแพลตฟอร์มที่ไม่ใช่ไอโอ
สำหรับแอปพลิเคชัน MVVMCROSS ที่กำหนดเป้าหมายแพลตฟอร์มอื่นนอกเหนือจาก iOS (เช่น Android) เครื่องมือไม่สามารถใช้โดยตรงได้ คุณจะต้องใช้เครื่องมือเฉพาะแพลตฟอร์มสำหรับการตรวจจับการรั่วไหลของหน่วยความจำ:
- Android: ใช้เครื่องมือเช่น Profiler หน่วยความจำของ Android Studio หรือห้องสมุดบุคคลที่สามเช่น Leakcanary
- แพลตฟอร์มอื่น ๆ : ใช้ประโยชน์จากเครื่องมือการทำโปรไฟล์หน่วยความจำเฉพาะแพลตฟอร์มหรือไลบรารี
โดยสรุปในขณะที่เครื่องมือมีประสิทธิภาพสูงสำหรับการตรวจจับการรั่วไหลของหน่วยความจำในแอพพลิเคชั่น 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-o-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