Не могу найти, где утечка памяти в этом коротком фрагменте кода

#iphone #ios #memory-management

#iPhone #iOS #управление памятью

Вопрос:

У меня есть приложение, в котором запущен простой таймер. Следующий код выполняется несколько раз в секунду из NSTimer. Я буду первым, кто признает, что управление памятью — мой самый слабый навык прямо сейчас как нового разработчика iOS. Когда я запускаю этот код, если я оставляю таймер включенным на некоторое время, я начинаю получать предупреждения get memory, и в конечном итоге он выходит из строя. Если я отключу NSTimer, он будет работать нормально в течение нескольких часов. Я не могу понять, что вызывает утечку:

 - (void)onTimerTick
{

    NSDate *date = [NSDate date];

    NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 
    NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date]; 

    NSInteger hour = [dateComponents hour]; 
    NSInteger min = [dateComponents minute]; 
    NSInteger sec = [dateComponents second];      


    double milliSince1970 = [date timeIntervalSince1970];
    int secsSince1970 = [date timeIntervalSince1970];
    int frame = (((milliSince1970 - secsSince1970) * 1000) / frameDuration)   1;


    timeCode.text =  [NSString stringWithFormat:@"%d:%d:%d:%d", hour, min, sec, frame];
    [calendar dealloc];

}
  

Любая помощь была бы высоко оценена!

Ответ №1:

Вызываю [calendar release] , не dealloc … фреймворк вызывает dealloc вас, когда calendar больше ничего не сохраняет.

Комментарии:

1. О, ты герой. Большое спасибо — все работает отлично, и я узнал, что все это время неправильно удалял объекты! Спасибо.