N'utilisez pas NSTimer
de cette façon. NSTimer est normalement utilisé pour déclencher un sélecteur à un intervalle de temps donné. Ce n'est pas de haute précision et n'est pas adapté à ce que vous voulez faire.
Ce que vous voulez est un timer haute résolution classe (en utilisant NSDate
):
Sortie:
Total time was: 0.002027 milliseconds
Total time was: 0.000002 seconds
Total time was: 0.000000 minutes
principal:
Timer *timer = [[Timer alloc] init];
[timer startTimer];
// Do some work
[timer stopTimer];
NSLog(@"Total time was: %lf milliseconds", [timer timeElapsedInMilliseconds]);
NSLog(@"Total time was: %lf seconds", [timer timeElapsedInSeconds]);
NSLog(@"Total time was: %lf minutes", [timer timeElapsedInMinutes]);
Edit: Ajout des méthodes pour -timeElapsedInMilliseconds
et -timeElapsedInMinutes
timer.h:
#import <Foundation/Foundation.h>
@interface Timer : NSObject {
NSDate *start;
NSDate *end;
}
- (void) startTimer;
- (void) stopTimer;
- (double) timeElapsedInSeconds;
- (double) timeElapsedInMilliseconds;
- (double) timeElapsedInMinutes;
@end
Timer.m
#import "Timer.h"
@implementation Timer
- (id) init {
self = [super init];
if (self != nil) {
start = nil;
end = nil;
}
return self;
}
- (void) startTimer {
start = [NSDate date];
}
- (void) stopTimer {
end = [NSDate date];
}
- (double) timeElapsedInSeconds {
return [end timeIntervalSinceDate:start];
}
- (double) timeElapsedInMilliseconds {
return [self timeElapsedInSeconds] * 1000.0f;
}
- (double) timeElapsedInMinutes {
return [self timeElapsedInSeconds]/60.0f;
}
@end
C'était une explication fantastique ... Merci, mais un prob. comment convertir ce double en un format d'heure comme "Hr: Sec: Min: Millsec" –
Cette classe ne contient pas de méthode dealloc. Est-ce que cette fuite ne va pas? – midas06
Si je voulais utiliser cette classe pour exécuter un bloc de code à plusieurs reprises (comme un NSTimer répétitif), comment ferais-je cela? – Sabobin