如何在Objective-C中编写Timer?

我试图用NSTimer做一个秒表。

我给了下面的代码:

nst_Timer = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(showTime) userInfo:nil repeats:NO]; 

它不工作在毫秒。 它需要超过1毫秒。

不要这样使用NSTimer 。 NSTimer通常用于在某个时间间隔触发select器。 这是不是很高的精度,不适合你想要做的。

你想要的是一个高分辨率计时器类(使用NSDate ):

输出:

 Total time was: 0.002027 milliseconds Total time was: 0.000002 seconds Total time was: 0.000000 minutes 

主要:

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

编辑:添加-timeElapsedInMilliseconds-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 

如果你想要一个计时器从一定时间内倒计时,首先不要使用Xcode提供的右下angular提供的代码块,它不起作用。 相反,这样做:

  printf("set timer in seconds\n"); int timer; scanf("%d", &timer); while(timer >= 1){ sleep(1); timer--; printf("%i\n", timer); }