Diferencia entre 2 fechas en segundos ios.
nsdate nstimeinterval (2)
Tengo una aplicación donde el contenido se muestra al usuario. Ahora quiero saber cuántos segundos un usuario realmente ve ese contenido. Así que en mi archivo de cabecera, he declarado una
NSDate *startTime;
NSDate *endTime;
Entonces, en mi opinión, aparecerá
startTime = [NSDate date];
Entonces, en mi opinión, desaparecerá
endTime = [NSDate date];
NSTimeInterval secs = [endTime timeIntervalSinceDate:startTime];
NSLog(@"Seconds --------> %f", secs);
Sin embargo, la aplicación se bloquea, con errores diferentes a veces. A veces es una pérdida de memoria, a veces es un problema con NSTimeInterval, y a veces se bloquea después de volver al contenido por segunda vez.
¿Alguna idea para arreglar esto?
Debe declarar una propiedad con retener para la fecha de inicio. Su fecha se publica antes de que pueda calcular la diferencia horaria.
Así que declara
@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]);
}
No te olvides de limpiar.
- (void)dealloc
{
[self.startDate release];
[super dealloc];
}
ya que no estás usando ARC, cuando escribes
startTime = [NSDate date];
no retiene el tiempo de startTime
, por lo que se desasigna antes de -viewWillDisappear
. Tratar
startTime = [[NSDate date] retain];
Además, recomiendo usar ARC. Debería haber muchos menos errores con la gestión de memoria que con ella.