نعم ، يمكن أن تساعد أداة الرسم البياني للذاكرة في 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://dodoordash.engineering/2019/05/22/ios-memory-leaks-and-bred-cycle-detection-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-bred-cycle-detection-using-xcodes-memory-graph-debugger/
[3]
[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-hold-of-viewmodels-and-never-disposing-w
[7]
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/knowing-where-retain-cycles-are-dremoving-them