سؤال

ولدي NSTimer الذي وقع قبالة كل ثانية، وعلى هذا ثاني I تحديث UILabel عن طريق تعيين خاصية النص كما يلي:

remainglbl.text = [NSString stringWithFormat:@"%i:%02i", var1, var2];   

وأنه يعمل بشكل جيد، ولكن عندما تشغيله في كسكودي مع بدء مع أداة الأداء -> التسريبات، يبدو أن الذاكرة وتبقي فقط على التسلق وتسلق الجبال والتسلق

.

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

وهذا هو تسرب الذاكرة؟ هل هناك طريقة أفضل أستطيع أن أفعل ذلك للحفاظ على استخدام ذاكرتي في الاختيار؟

وشكرا!

تحديث: رمز لإنشاء الموقت هو كما يلي:

timeTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(changeTime:) userInfo:nil repeats:YES];  

ورمز لتنظيف في النهاية الموقت هو كما يلي:

[timeTimer invalidate];
[timeTimer release];
timeTimer = nil;

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

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

المحلول

وأعتقد أن المشكلة التي لم أكن أفهم أدوات الأداء. تعمل مع مراقبة نشاط لا تظهر زيادة استخدام الذاكرة.

نصائح أخرى

وفقط من باب الفضول، هل لا تزال المشكلة تحدث إذا كنت تستخدم [remainingLbl setText:] بدلا من تعيين الخاصية؟ التعليمات البرمجية تبدو على ما يرام ... يجب تنظيف ذاكرة تصل منذ stringWithFormat autoreleases السلسلة.

وشيء آخر في محاولة: عند إنشاء المواضيع في الهدف C لديك لالتفاف كافة التعليمات البرمجية في NSAutoreleasePool بحيث يتم تنظيف الأشياء التي تخلق أثناء التنفيذ لمؤشر الترابط يصل. لا ينبغي أن تحدث فرقا هنا واحدة يجب أن تكون موجودة بالفعل - ولكن الامر يستحق رصاصة واحدة

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