سؤال

ما هي أفضل باتيك لإعادة استخدام UiviewControllers؟ في العديد من التطبيقات (بما في ذلك أمثلة Apple الخاصة: على سبيل المثال SQLiteBooks) ، يتم تخصيص UiviewControllers وتهيئته في كل مرة ، يتم دفع UiviewController إلى المكدس. هذا يزيد من استخدام الذاكرة مع كل وحدة تحكم جديدة ، لأن الكائنات تبقى في الذاكرة ولا تستخدم مرة أخرى.

كيف تجعلها أفضل؟

هل كانت مفيدة؟

المحلول

هذا ما أقوم به عند إنشاء ViewController جديد ويتم إصدار الذاكرة عند إزالة العرض من النافذة

MyViewController *mvc = [[[MyViewController alloc] initWithNibName:@"MyView" bundle:nil] autorelease];
[[self navigationController] pushViewController:mvc animated:YES];

نصائح أخرى

هذا يزيد من استخدام الذاكرة مع كل وحدة تحكم جديدة ، لأن الكائنات تبقى في الذاكرة ولا تستخدم مرة أخرى.

يجب أن يتم إصداره عندما يتم عرض المكدس ، طالما أنك لم تحصل على شيء آخر تمسك به. تحقق من استدعاء أساليب Dealloc الخاصة بك.

أيضًا إذا تم دفعها إلى المكدس ، فأنت بحاجة إلى الاحتفاظ بها على الأقل حتى يتم برزتها (والتي تحدث تلقائيًا إذا اتبعت الأنماط القياسية). لذلك هو تستخدم مرة أخرى.

لذا ، يجب أن يحافظ متابعة النمط القياسي بالفعل على استخدام الذاكرة الخاص بك بقدر ما يمكنك التخلص منه.

هل لديك بالفعل مشكلة في الذاكرة تحاول معالجتها أم أن هذه حالة من التحسين السابق لأوانه؟ أود أن أقول أنه ما لم تكن هناك مشكلة محددة للموارد ، فإن أفضل الممارسات هي اتباع أنماط وحدة تحكم العرض القياسية.

ضع نقطة توقف في وظيفة DealLoc الخاصة بوحدة التحكم في العرض ، وتأكد من استدعاءها عند إزالة وحدة التحكم في العرض من النافذة. يجب ألا تستمر الذاكرة في البناء. إذا كنت تقوم بإنشاء وحدات التحكم الخاصة بك بشكل صحيح (كما يظهر LostIntransit أعلاه) ، فيجب إصدار ذاكرة كل وحدة تحكم عند إزالتها.

إذا رأيت أن Dealloc لا يتم استدعاؤه ، فهذا يعني أنه في مكان ما في التطبيق ، لا يزال هناك إشارة إلى وحدة التحكم في العرض.

لا تنس أن وحدة التحكم في العرض ليست وجهة نظرك.

يمكن أن تفريغ وجهات النظر التي تحتفظ بها وحدة التحكم في العرض ، لذا فإن عرض وحدات التحكم نفسها خفيفة الوزن للغاية. إذا كنت ترغب في الحفاظ على البصمة الضوء حقًا ، فيمكنك إلغاء أي بيانات أخرى قامت بها وحدة التحكم بتخصيصها في ViewDidUnload (تسمى معظمها عندما يكون هناك تحذير من الذاكرة - إنه شيء 3.0 فقط).

كما هو مذكور في الغالب ، سيتم توحيد وحدات التحكم عندما تتركها (تراجع) لذلك لا يوجد عمومًا أي معلقة على أي حال. لكن في بعض الأحيان أجد أنه من المفيد ترك إشارة إلى ما إذا كنت أرغب في إعادة فتح هذا العرض في نفس الحالة التي تركها المستخدم (لا يعمل بين عمليات إطلاق التطبيق).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top