У меня есть приложение, где контент отображается для пользователя. Теперь я хочу выяснить, сколько секунд пользователь фактически просматривает контент для. Так что в моем заголовочный файл, я'вэ объявлен
NSDate *startTime;
NSDate *endTime;
Потом в моей viewWillAppear
startTime = [NSDate date];
Потом в моей viewWillDisappear
endTime = [NSDate date];
NSTimeInterval secs = [endTime timeIntervalSinceDate:startTime];
NSLog(@"Seconds --------> %f", secs);
Однако, приложение падает с различными ошибками иногда. Иногда это'ы утечка памяти, иногда это'ов проблемы с NSTimeInterval, и иногда она падает после вернуться к содержанию во второй раз.
Любые идеи о том, чтобы это исправить?
поскольку вы не используете дуги, когда ты пишешь
свойство StartTime = [NSDate дата];
вы не сохраняете начала
, поэтому он освобождается раньше-viewWillDisappear` называется. Попробовать
свойство StartTime = [[NSDate дата] сохранить];
Также, я рекомендую использовать дуги. Там должно быть гораздо меньше ошибок с управлением памятью с ним, чем без него
Вы должны объявить свойство сохранять к дате начала. Ваша дата становится выпущен до вы можете рассчитать разницу во времени.
Так объявить
@property (nonatomic, retain) NSDate *startDate
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self setStartDate: [NSDate date]];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
NSLog(@"Seconds --------> %f",[[NSDate date] timeIntervalSinceDate: self.startDate]);
}
Дон'т забудьте очистки.
- (void)dealloc
{
[self.startDate release];
[super dealloc];
}