Я прошу прощения, если я не очень ясно дал понять сначала. То, что я искал, было не способом создания таймера, а способом точной синхронизации таймера со временем устройства.
Итак, вот что я придумал:
NSInteger seconds = ((NSInteger)CFAbsoluteTimeGetCurrent() % 60);
while (true) {
NSInteger currentSeconds = ((NSInteger)CFAbsoluteTimeGetCurrent() % 60);
if(seconds != currentSeconds){
NSLog(@"Seconds changed");
// fire my timer here
break;
}
NSLog(@"currentSeconds: %i",currentSeconds);
seconds = currentSeconds;
}
Как вы можете видеть в журналах, NSLog (@ "Секунды изменились") срабатывает точно при изменении секунд, и здесь я могу вызвать таймер, чтобы запустить 1-секундный интервал и обновить мой пользовательский интерфейс, так далее...
Вы можете очень легко определить, взглянув на метку времени в журнале, секунды разделены.
....
2012-04-01 15:02:03.996 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:03.996 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:03.997 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:03.997 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:03.997 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:03.998 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:03.998 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:03.998 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:03.999 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:03.999 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:03.999 TestApp[75701:f803] currentSeconds: 3
2012-04-01 15:02:04.000 TestApp[75701:f803] Seconds changed