#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. О, ты герой. Большое спасибо — все работает отлично, и я узнал, что все это время неправильно удалял объекты! Спасибо.