سؤال

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

.

وهذا على ما يرام، ولكن بمجرد يعود التحكم إلى الهاتف (أي بعد أن تم تجهيزها بلدي انقر على زر) يبدو أن يتم تحرير تجمع autorelease. وأظن أن هذا هو كيف أنه من المفترض أن يكون، ولكن أنا أتساءل ما هو أفضل الممارسات لهذا الوضع.

ولقد لجأت إلى إرسال رسالة retain من المتصل بحيث لا يتم تحرير الكائن ومن ثم صراحة إطلاقه في dealloc.

هل هذا هو النهج الأفضل؟

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

المحلول

ويتم تحرير تجمع autorelease عادة بعد كل تكرار للحلقة التشغيل. تقريبا، ويتمحور كل تطبيق الكاكاو والكاكاو اللمس مثل هذا:

Get the next message out of the queue
Create an autorelease pool
Dispatch the message (this is where your application does its work)
Drain the autorelease pool

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

نصائح أخرى

وعن طريق autorelease هو طريقة للقول، "كائن، وأنا لا أريد منك بعد الآن، ولكن انا ذاهب لتمرير لك شخص آخر الذي قد ترغب أنت، لذلك لا تختفي تماما بعد". ذلك الكائن ستلتزم جميع أنحاء طويلة بما فيه الكفاية بالنسبة لك للعودة من طريقة أو إعطائها إلى كائن آخر. عندما يريد بعض رمز للحفاظ على وجوه حولها، ويجب أن يدعي ملكية retaining ذلك.

المبادئ التوجيهية لإدارة الذاكرة للحصول على كل ما تحتاجه ل تعرف إلى استخدام autorelease بشكل صحيح.

نعم، هذا هو أفضل نهج. حقا هو المقصود Autorelease فقط للتفاعل في التعليمات البرمجية التي تعرفها. بمجرد الانتهاء من تخزين كائن، يجب عليك إما نعلم أن الكائن الذي يحمل إشارة لن يموت / الخروج من نطاق حتى كنت أيضا القيام به مع الكائن، أو كنت بحاجة للاحتفاظ الكائن.

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

scroll top