Разница между 2 датами в секундах ios
У меня есть приложение, где содержимое отображается пользователю. Теперь я хочу узнать, сколько секунд пользователь просматривает этот контент. Поэтому в моем файле заголовка я объявил
NSDate *startTime;
NSDate *endTime;
Затем в моем представленииWillAppear
startTime = [NSDate date];
Затем в моем представленииWillDisappear
endTime = [NSDate date];
NSTimeInterval secs = [endTime timeIntervalSinceDate:startTime];
NSLog(@"Seconds --------> %f", secs);
Однако приложение иногда сбой. Иногда это утечка памяти, иногда это проблема с NSTimeInterval, и иногда она вылетает после возврата к содержимому во второй раз.
Любые идеи по исправлению этого?
Ответы
Ответ 1
так как вы не используете ARC, когда пишете
startTime = [NSDate date];
вы не сохраняете startTime
, поэтому он освобождается до вызова -viewWillDisappear
. Попробуйте
startTime = [[NSDate date] retain];
Кроме того, я рекомендую использовать ARC. Должно быть гораздо меньше ошибок в управлении памятью с ним, чем без него
Ответ 2
Вы должны объявить свойство с сохранением для даты начала. Ваша дата освобождается, прежде чем вы сможете рассчитать разницу во времени.
Так объявите
@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];
}