سؤال

أحاول تنفيذ طريقة من شأنها زيادة متغير مثيل NSDATE لمدة شهر واحد. أواجه مشاكل في إدارة الذاكرة مع هذا. (أنا أستخدم MallocScraxBle و NSZombieEnabled، والحصول على الرسالة: - [CFDATE COPY]: الرسائل المرسلة إلى المثيل المعالج

سؤالي ينزل: ما هي أفضل طريقة لزيادة التاريخ؟ هنا هو رمزي:

NSDate *displayedMonthYear;
....

-(IBAction) nextMonth:(id)sender {

    NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setMonth:1];
    NSDate *prevDate = [displayedMonthYear copy];
    [displayedMonthYear release];
    displayedMonthYear = [calendar dateByAddingComponents:dateComponents toDate:prevDate options:0];
    [prevDate release];
    [dateComponents release];
    [calendar release];
}

في الأصل لم أفعل الشيء مع النسخة المحرة، ولكن كان يفعل شيئا مثل:

displayedMonthYear = [calendar dateByAddingComponents:dateComponents toDate:displayedMonthYear options:0];

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

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

المحلول

تحتاج retain القيمة المعينة ل displayedMonthYear.

ليس هناك حاجة أيضا للاستخدام copy. وبعد هناك الكثير من الطرق للقيام بذلك؛ إليك مثال آخر:

NSDate* newDate = [calendar dateByAddingComponents:dateComponents displayedMonthYear options:0];
[displayedMonthYear release];
displayedMonthYear = [newDate retain];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top