Как написать таймер в Objective-C?
Я пытаюсь сделать секундомер с NSTimer.
Я дал следующий код:
nst_Timer = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(showTime) userInfo:nil repeats:NO];
и он не работает в миллисекундах. Это занимает более 1 миллисекунды.
2 ответов
не используйте NSTimer
этак. NSTimer обычно используется для запуска селектора в некоторый интервал времени. Это не высокая точность и не подходит для того, что вы хотите сделать.
что вы хотите-это таймер высокого разрешения класса (используя NSDate
):
выход:
Total time was: 0.002027 milliseconds
Total time was: 0.000002 seconds
Total time was: 0.000000 minutes
Main:
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: добавлены методы для -timeElapsedInMilliseconds
и -timeElapsedInMinutes
таймер.h:
#import <Foundation/Foundation.h>
@interface Timer : NSObject {
NSDate *start;
NSDate *end;
}
- (void) startTimer;
- (void) stopTimer;
- (double) timeElapsedInSeconds;
- (double) timeElapsedInMilliseconds;
- (double) timeElapsedInMinutes;
@end
таймер.м
#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
Если вы хотите таймер, который отсчитывает от определенного времени в секундах, прежде всего не используйте блок кода, поставляемый в правом нижнем углу, поставляемый Xcode, он не работает. Вместо этого:
printf("set timer in seconds\n");
int timer;
scanf("%d", &timer);
while(timer >= 1){
sleep(1);
timer--;
printf("%i\n", timer);
}