web-dev-qa-db-fra.com

Différence entre 2 dates en secondes ios

J'ai une application où le contenu est affiché à l'utilisateur. Je veux maintenant savoir combien de secondes un utilisateur visualise réellement ce contenu. Donc, dans mon fichier d'en-tête, j'ai déclaré un

 NSDate *startTime;
 NSDate *endTime;

Puis, à mon avis, apparaîtra

 startTime = [NSDate date];

Puis, à mon avis, disparaîtra

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

Cependant, l'application se bloque, avec parfois des erreurs différentes. Parfois, c'est une fuite de mémoire, parfois c'est un problème avec NSTimeInterval, et parfois il se bloque après être revenu au contenu pour la deuxième fois.

Des idées pour résoudre ce problème?

47
Adam Altinkaya

puisque vous n'utilisez pas ARC, lorsque vous écrivez

startTime = [NSDate date];

vous ne conservez pas startTime, il est donc désalloué avant -viewWillDisappear est appelé. Essayer

startTime = [[NSDate date] retain];

Aussi, je recommande d'utiliser ARC. Il devrait y avoir beaucoup moins d'erreurs avec la gestion de la mémoire avec, qu'avec sans

13
medvedNick

Vous devez déclarer une propriété avec retenue pour la date de début. Votre date est publiée avant de pouvoir calculer le décalage horaire.

Alors déclarez

@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]);
}

N'oubliez pas de nettoyer.

- (void)dealloc
{
    [self.startDate release];
    [super dealloc];
}
12
Lukas