سؤال

وأواجه الكثير من القضايا مع كائنات NSDate يتم deallocated قبل الأوان. وأظن أن القضايا قد تكون ذات صلة الطريقة التي أتعامل مع الكائنات عاد من وسائل الراحة NSDate. I <م> التفكير أن بلدي إعلان الملكية showDate في فئة JKShow يجب أن يكون "الاحتفاظ"، ولكن تتغير لتعيين أو نسخة يبدو أن يكون له تأثير على هذه المسألة.

JKShow *show; 
NSDate *date;
NSMutableArray *list = [[NSMutableArray alloc] init];

// Show 1
show = [[JKShow alloc] init];
//...
date = [gregorian dateFromComponents:dateComponents];
show.showDate = date;
[list addObject:[show autorelease]];

// Show 2
show = [[JKShow alloc] init];
//...
date = [gregorian dateFromComponents:dateComponents];
show.showDate = date;
[list addObject:[show autorelease]];

UPDATE

وكانت المسألة ليست في رمز نسخ هنا. في بلدي طريقة JKShow init لم أكن الإبقاء على تاريخ إرجاعها من أسلوب NSDate الراحة. شكرا لمساعدتكم جميعا.

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

المحلول 4

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

نصائح أخرى

يجب أن يكون تاريخ عاد من dateFromComponents في التجمع autorelease، لذلك كنت على صواب تلك الممتلكات showDate الخاص بك يجب أن يكون "الاحتفاظ". في الواقع يجب أن تكون على أي حال (إلا إذا كنت تريد على وجه التحديد "نسخة").

ومن التعليمات البرمجية التي أظهرت يبدو انك تعطي ملكية الكائن برنامجك تماما إلى القائمة (كما كنت وضع autorelease عليها كما يمكنك إضافتها). أنت تقول أن الكائنات التاريخ الذي يتم deallocated قبل أن تظهر الكائنات الخروج من قائمة (أو يتم deallocated القائمة)؟

وأيضا، الذي تستخدمه خصائص توليفها، أم أنك كتابتها باليد؟ إذا كان هذا الأخير، ما هو من طريقة الملكية setShowDate مثل؟

ويمكنك أيضا محاولة تسجيل في retainCount الكائن التاريخ في أماكن مختلفة (على الرغم من أنني دائما تجد أن autorelease تعقيد حقا ذلك).

إذا showDate هو الاحتفاظ بالممتلكات التي يجب أن تكون كافية، بالنظر إلى الرمز الذي قد نشرت. شيء آخر (ربما في تنفيذ JKShow ل) قد لا تكون صحيحة.

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

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

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

هل تعمل مع جامع القمامة تشغيل؟

هل list متغير مثيل أو متغير ثابت، أو هو متغير محلي؟

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