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?
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
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];
}