Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ฉันจะใช้ตัวดีบักกราฟกราฟหน่วยความจำเพื่อระบุวงจรเก็บรักษาในแอปพลิเคชัน MVVMcross ได้อย่างไร


ฉันจะใช้ตัวดีบักกราฟกราฟหน่วยความจำเพื่อระบุวงจรเก็บรักษาในแอปพลิเคชัน MVVMcross ได้อย่างไร


การใช้ตัวดีบักกราฟกราฟหน่วยความจำใน XCode เป็นวิธีที่มีประสิทธิภาพในการระบุวัฏจักรเก็บรักษาในแอปพลิเคชัน MVVMcross นี่คือคำแนะนำทีละขั้นตอนเกี่ยวกับวิธีการทำ:

บทนำเกี่ยวกับตัวดีบักกราฟหน่วยความจำ

ตัวดีบักกราฟกราฟหน่วยความจำเป็นเครื่องมือที่ทรงพลังใน Xcode ที่ช่วยให้นักพัฒนาระบุการรั่วไหลของหน่วยความจำและรักษาวัฏจักรโดยการแสดงความสัมพันธ์ของวัตถุในหน่วยความจำ มันให้ภาพรวมของสถานะหน่วยความจำปัจจุบันแสดงให้เห็นว่าวัตถุใดถูกเก็บรักษาไว้และวิธีการอ้างอิง

ขั้นตอนในการระบุรอบการรักษา

1. เรียกใช้แอพของคุณ: เริ่มต้นด้วยการเรียกใช้แอปพลิเคชัน MVVMCROSS ของคุณใน XCODE ตรวจสอบให้แน่ใจว่าคุณกำลังทดสอบส่วนที่เฉพาะเจาะจงของแอพที่คุณสงสัยว่าอาจเกิดรอบการรักษา

2. เปิดตัวดีบักกราฟกราฟหน่วยความจำ: เมื่อแอปของคุณทำงานแล้วให้เปิดตัวดีบักกราฟหน่วยความจำโดยคลิกที่ปุ่มสามโหนดที่อยู่ระหว่างตัวดีบั๊ก Visual และปุ่มจำลองตำแหน่งในแถบเครื่องมือของ Xcode สิ่งนี้จะจับภาพสแน็ปช็อตหน่วยความจำของสถานะปัจจุบันของแอปของคุณ

3. วิเคราะห์สแน็ปช็อตหน่วยความจำ: ในแผงด้านซ้ายของตัวดีบักกราฟหน่วยความจำคุณจะเห็นรายการของวัตถุที่อยู่ในหน่วยความจำพร้อมกับจำนวนอินสแตนซ์ของแต่ละคลาส มองหาวัตถุที่ไม่ควรอยู่ที่นั่นหรือมีจำนวนอินสแตนซ์ที่ไม่คาดคิด

4. ระบุวงจรเก็บรักษา: เลือกวัตถุจากแผงด้านซ้ายเพื่อดูกราฟอ้างอิง กราฟจะแสดงการอ้างอิงที่แข็งแกร่งเป็นเส้นหนาและการอ้างอิงที่ไม่รู้จัก (ซึ่งอาจอ่อนแอหรือแข็งแรง) เป็นเส้นสีเทาอ่อน วงจรการเก็บรักษาจะถูกระบุโดยลูปในกราฟที่วัตถุอ้างอิงซึ่งกันและกันในลักษณะที่ป้องกันไม่ให้พวกเขาถูกจัดการ

5. นำทางกราฟวัตถุ: ในการติดตามแหล่งที่มาของวัฏจักรการเก็บรักษาคุณอาจต้องนำทางผ่านกราฟวัตถุหลายชิ้น เริ่มต้นด้วยวัตถุที่รั่วไหลออกมาและติดตามการอ้างอิงไปข้างหลังเพื่อค้นหาวัตถุหลักที่เก็บรักษาไว้

6. ตรวจสอบรายละเอียดวัตถุ: เมื่อคุณคลิกที่โหนดในกราฟแผงตรวจสอบจะให้ข้อมูลโดยละเอียดเกี่ยวกับวัตถุรวมถึงคุณสมบัติและความสัมพันธ์ สิ่งนี้สามารถช่วยให้คุณเข้าใจว่าทำไมวัตถุจึงถูกเก็บรักษาไว้

7. ทำซ้ำ Core Flows: เพื่อยืนยันวัฏจักรการเก็บรักษาให้ทำซ้ำการไหลหลักหรือคุณสมบัติในแอพของคุณหลายครั้งโดยใช้สแน็ปช็อตหน่วยความจำหลังจากการทำซ้ำแต่ละครั้ง หากจำนวนอินสแตนซ์ของวัตถุเฉพาะเพิ่มขึ้นเมื่อเวลาผ่านไปมันอาจบ่งบอกถึงวงจรการรักษา

8. แก้ไขวัฏจักรการรักษา: เมื่อคุณระบุแหล่งที่มาของวัฏจักรการรักษาคุณสามารถแก้ไขได้โดยการเปลี่ยนการอ้างอิงที่แข็งแกร่งเป็นข้อมูลอ้างอิงที่อ่อนแอหรือไม่ได้เป็นเจ้าของตามความเหมาะสม ตัวอย่างเช่นในการปิดให้ใช้ `[ตัวตนที่อ่อนแอ]` เพื่อหลีกเลี่ยงการจับภาพตัวเองอย่างรุนแรง

สถานการณ์วงจรรักษาทั่วไปใน mvvmcross

ในแอพพลิเคชั่น MVVMCROSS การรักษาวัฏจักรมักเกิดขึ้นเนื่องจากการอ้างอิงที่แข็งแกร่งระหว่างโมเดลมุมมองและมุมมองหรือเนื่องจากการปิดรูปแบบการจับมุมมองหรือมุมมองอย่างมาก ตัวอย่างเช่นหากโมเดลมุมมองมีการอ้างอิงที่แข็งแกร่งไปยังมุมมองและมุมมองยังมีการอ้างอิงที่แข็งแกร่งกลับไปที่โมเดลมุมมองไม่สามารถจัดการได้

เพื่อป้องกันวัฏจักรดังกล่าวตรวจสอบให้แน่ใจว่าโมเดลมุมมองของคุณได้รับการทำความสะอาดอย่างเหมาะสมเมื่อมีการไล่ออกจากมุมมอง ใช้วิธีวงจรชีวิตที่จัดทำโดย MVVMcross เช่น `หายไป ()` เพื่อปล่อยทรัพยากรและทำลายการอ้างอิงที่ไม่จำเป็น

โดยทำตามขั้นตอนเหล่านี้และทำความเข้าใจว่าความสัมพันธ์ของวัตถุนั้นถูกมองเห็นได้ในตัวดีบักกราฟหน่วยความจำคุณสามารถระบุและแก้ไขได้อย่างมีประสิทธิภาพในแอปพลิเคชัน MVVMcross ของคุณ

การอ้างอิง:
[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycycy
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-retain-cyclecyc
[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/