Подтвердить что ты не робот

Разница между 2 датами в секундах ios

У меня есть приложение, где содержимое отображается пользователю. Теперь я хочу узнать, сколько секунд пользователь просматривает этот контент. Поэтому в моем файле заголовка я объявил

 NSDate *startTime;
 NSDate *endTime;

Затем в моем представленииWillAppear

 startTime = [NSDate date];

Затем в моем представленииWillDisappear

endTime = [NSDate date];
NSTimeInterval secs = [endTime timeIntervalSinceDate:startTime];
NSLog(@"Seconds --------> %f", secs);

Однако приложение иногда сбой. Иногда это утечка памяти, иногда это проблема с NSTimeInterval, и иногда она вылетает после возврата к содержимому во второй раз.

Любые идеи по исправлению этого?

4b9b3361

Ответ 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];
}