ใช่เครื่องมือกราฟหน่วยความจำใน Xcode สามารถช่วยระบุรอบการรักษาในแอปพลิเคชัน MVVMcross นี่คือวิธีการทำงานและวิธีการใช้กับ mvvmcross:
การทำความเข้าใจยังคงรักษาวัฏจักร
รอบการรักษาเกิดขึ้นเมื่อวัตถุสองชิ้นขึ้นไปมีการอ้างอิงที่แข็งแกร่งซึ่งกันและกันป้องกันไม่ให้พวกเขาถูกจัดการจากหน่วยความจำ นี่เป็นปัญหาทั่วไปในการพัฒนา iOS โดยเฉพาะอย่างยิ่งเมื่อใช้ผู้ได้รับมอบหมายหรือปิดที่จับวัตถุอย่างรุนแรง
ใช้เครื่องมือกราฟหน่วยความจำ
1. การรันแอพและถ่ายภาพสแน็ปช็อต: หากต้องการใช้เครื่องมือกราฟหน่วยความจำให้เรียกใช้แอปพลิเคชัน MVVMCROSS ของคุณใน XCODE และนำทางผ่านการไหลหลัก ใช้สแน็ปช็อตหน่วยความจำที่จุดต่าง ๆ โดยเฉพาะอย่างยิ่งหลังจากนำทางออกไปจากมุมมองหรือแบบจำลองมุมมองที่ควรได้รับการจัดการ
2. การวิเคราะห์สแน็ปช็อต: ในตัวดีบักกราฟหน่วยความจำแผงด้านซ้ายจะแสดงวัตถุทั้งหมดในหน่วยความจำพร้อมกับจำนวนอินสแตนซ์ของพวกเขา มองหาวัตถุที่ควรได้รับการจัดการ แต่ยังคงอยู่ การเพิ่มจำนวนอินสแตนซ์ของชั้นเรียนเมื่อเวลาผ่านไปสามารถระบุวัฏจักรรักษา
3. การระบุรอบการรักษา: เลือกวัตถุในแผงด้านซ้ายเพื่อดูกราฟวัตถุ กราฟแสดงการอ้างอิงที่ทำให้วัตถุอยู่ในหน่วยความจำ สายตัวหนาบ่งบอกถึงการอ้างอิงที่แข็งแกร่งในขณะที่เส้นสีเทาอ่อนระบุการอ้างอิงที่ไม่รู้จัก (ซึ่งอาจอ่อนแอหรือแข็งแรง) หากคุณเห็นลูปที่วัตถุอ้างอิงซึ่งกันและกันอย่างรุนแรงก็น่าจะเป็นวัฏจักรรักษา
4. การแก้ไขรอบการรักษา: เมื่อคุณระบุวัฏจักรการเก็บรักษาให้ตรวจสอบรหัสของคุณเพื่อค้นหาว่ามีการอ้างอิงที่แข็งแกร่งอยู่ที่ไหน บ่อยครั้งที่สิ่งนี้เกี่ยวข้องกับการเปลี่ยนการอ้างอิงที่แข็งแกร่งไปสู่การอ้างอิงที่อ่อนแอโดยเฉพาะอย่างยิ่งในผู้ได้รับมอบหมายหรือปิด
สมัคร mvvmcross
ในแอพพลิเคชั่น MVVMCROSS ให้ดูแบบจำลองการดูอย่างแน่นหนากับวงจรชีวิตของมุมมอง บางครั้งสิ่งนี้สามารถนำไปสู่การรักษาวัฏจักรหากไม่ได้จัดการอย่างถูกต้อง ตัวอย่างเช่นหากโมเดลมุมมองมีการอ้างอิงที่แข็งแกร่งไปยังมุมมองและมุมมองยังมีการอ้างอิงที่แข็งแกร่งไปยังโมเดลมุมมอง (อาจผ่านการเชื่อมโยง) วัฏจักรรักษาสามารถเกิดขึ้นได้
เพื่อหลีกเลี่ยงสิ่งนี้ใน MVVMCROSS ตรวจสอบให้แน่ใจว่าการอ้างอิงใด ๆ จากมุมมองเพื่อดูโมเดลนั้นอ่อนแอ ใช้วิธีวงจรชีวิตที่ได้รับจาก MVVMCROSS (เช่น `หายไป ') เพื่อทำความสะอาดการอ้างอิงที่แข็งแกร่งใด ๆ เมื่อมีการไล่ออก นอกจากนี้ให้ใช้เครื่องมือกราฟหน่วยความจำเพื่อตรวจสอบว่าโมเดลมุมมองกำลังจัดวางอย่างถูกต้องเมื่อมุมมองที่เกี่ยวข้องถูกลบออกจากสแต็กการนำทาง
ตัวอย่างการระบุวัฏจักรรักษาใน mvvmcross
สมมติว่าคุณมี `myviewmodel 'ที่ถูกผูกไว้กับ` myview' ถ้า `MyView` มีการอ้างอิงที่แข็งแกร่งถึง` MyViewModel` และ `MyViewModel` ยังมีการอ้างอิงที่แข็งแกร่งถึง` MyView` (อาจผ่านผู้แทนหรือปิด) คุณจะเห็นวัตถุทั้งสองที่เหลืออยู่ในหน่วยความจำแม้หลังจากนำทางจาก 'MyView' การใช้เครื่องมือกราฟหน่วยความจำคุณจะระบุรอบนี้จากนั้นแก้ไขรหัสของคุณเพื่อใช้การอ้างอิงที่อ่อนแอเมื่อจำเป็น
โดยทำตามขั้นตอนเหล่านี้และใช้เครื่องมือกราฟหน่วยความจำคุณสามารถระบุและแก้ไขรอบการรักษารอบในแอปพลิเคชัน 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://paul-samuels.com/blog/2018/11/20/unit-testing-retain-cycles/
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://stackoverflow.com/questions/54040726/mvvmcross-android-appears-to-be-keep-hoade-hold-of-viewmodels และ never-disposing-w
[7] https://www.donnywals.com/using-xcodes-memory-graph-to-find-memory-leaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/knowing-where-retain-cycles-are-and-removing-them