في MVVMCROSS ، كما هو الحال في الأطر الأخرى ، فإن الاختيار بين استخدام الضعف والمكانة القوية أمر بالغ الأهمية لإدارة الذاكرة ومنع تسرب الذاكرة. إليك شرح مفصل للاختلافات وكيف تنطبق في سياق MVVMCROSS:
مراجع قوية
** المراجع القوية هي النوع الافتراضي للمرجع في معظم لغات البرمجة ، بما في ذلك C#. عندما تتم الرجوع إلى كائن بقوة ، لا يمكن لجامع القمامة جمعه حتى تتم إزالة جميع الإشارات القوية إلى الكائن. هذا يعني أنه طالما أن هناك إشارة قوية واحدة على الأقل إلى كائن ، فسيبقى في الذاكرة.
في MVVMCROSS ، يمكن أن تؤدي المراجع القوية إلى تسرب الذاكرة إذا لم تتم إدارتها بشكل صحيح. على سبيل المثال ، إذا كان ViewModel لديه إشارة قوية إلى العرض ، ويحمل العرض أيضًا إشارة قوية إلى ViewModel ، يتم إنشاء دورة الاحتفاظ. هذا يمنع كلا الكائنين من جمع القمامة حتى عندما لم تعد هناك حاجة إليها.
المراجع الضعيفة
** المراجع الضعيفة ، من ناحية أخرى ، تسمح لمجمع القمامة بجمع الكائن المشار إليه في حالة عدم وجود مراجع قوية. يعد هذا مفيدًا بشكل خاص في السيناريوهات التي تريد السماح لكائن بجمع القمامة إذا لم تعد هناك حاجة إليها ، لكنها لا تزال ترغب في الوصول إليها إذا كان متاحًا.
في MVVMCROSS ، يتم تشجيع استخدام المراجع الضعيفة على تجنب الاحتفاظ بدورات بين علب الروك والآراء. على سبيل المثال ، بدلاً من وجود عرض ViewModel بقوة ، يمكنك استخدام مرجع ضعيف أو نظام مراسلة للتواصل بينهما. هذا يضمن أن العرض يمكن جمع القمامة عندما لم يعد هناك حاجة إليه ، حتى لو كان لا يزال موجودًا.
مثال عملي في MVVMCROSS
ضع في اعتبارك سيناريو حيث يحتاج ViewModel إلى إخطار العرض عند تحميل بعض البيانات. يتمثل النهج الشائع في استخدام حدث في ViewModel الذي يشترك فيه العرض. ومع ذلك ، إذا اشتركت العرض بقوة في هذا الحدث ، فإنه ينشئ مرجعًا قويًا من ViewModel مرة أخرى إلى العرض ، مما قد يمنع العرض من جمع القمامة.
لتجنب ذلك ، يوفر MVVMcross طرقًا مثل "PearsBscribe" ، مما يسمح للتشكيل بالاشتراك في أحداث ViewModel بشكل ضعيف. بهذه الطريقة ، لا يحمل ViewModel إشارة قوية إلى العرض ، مما يمنع تسرب الذاكرة.
الإرشادات لاستخدام المراجع الضعيفة في MVVMCROSS
- استخدم المراجع الضعيفة لوجهات النظر: عندما يحتاج ViewModel إلى التفاعل مع العرض أو استخدام المراجع الضعيفة أو أنظمة المراسلة لتجنب الاحتفاظ بدورات.
- تجنب الإشارات القوية إلى وجهات النظر: تأكد من أن ViewModels لا تحمل إشارات قوية إلى وجهات النظر للسماح بتجميع المشاهدات التي يتم جمعها عندما لم تعد هناك حاجة إليها.
- استخدم أنظمة المراسلة: فكر في استخدام أنظمة الرسائل مثل MVVMcross's `imvxmessenger" للتواصل بين عروض العرض والآراء دون إنشاء مراجع قوية.
باتباع هذه الإرشادات ، يمكنك إدارة الذاكرة بشكل فعال في تطبيقات MVVMCross ومنع المشكلات الشائعة مثل تسرب الذاكرة.
الاستشهادات:[1] https://stackoverflow.com/a/19379912
[2] https://forums.swift.org/t/unowned-references-have-more-over-
[3] https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/weak-references
[4]
[5] https://stackoverflow.com/questions/40966271/weak-reference-and-strong-ference
[6] https://langdev.stackexchange.com/questions/1351/approachs-for-implementing-ferences
[7] https://putridparrot.com/blog/weakreferences-in-net/
[8]