Как написать таймер в Objective-C?

Я пытаюсь сделать секундомер с NSTimer.

Я дал следующий код:

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

и он не работает в миллисекундах. Это занимает более 1 миллисекунды.

Не используйте NSTimer таким образом. NSTimer обычно используется для запуска селектора через некоторый временной интервал. Это не высокая точность и не подходит для того, что вы хотите сделать.

То, что вы хотите, – это class таймера высокого разрешения (с использованием 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  @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, он не работает. Вместо этого сделайте следующее:

  printf("set timer in seconds\n"); int timer; scanf("%d", &timer); while(timer >= 1){ sleep(1); timer--; printf("%i\n", timer); } 
  • Как отключить stream
  • Перемещение объектов и таймеров
  • Windows.Forms.Timer OR System.Threading.Timer
  • Таймер, события и garbage collection: я что-то упускаю?
  • анимация JPanel (слайд) с таймером
  • Таймер Java
  • Android: доступ к элементу пользовательского интерфейса из streamа таймера
  • Лучший таймер для использования в службе Windows
  • Почему таймеры .NET ограничены разрешением 15 мс?
  • Обновление пользовательского интерфейса в C # с использованием таймера
  • Завершить работу по истечении периода времени
  • Давайте будем гением компьютера.