您可能不想尽快检查某些内容,因为这会导致性能问题。
如果您想要显示更新的内容,您可以使用CADisplayLink。你可以用谷歌搜索例子,比如这个。
如果您不需要将其链接到显示刷新,您可以设置一个NSTimer,或使用performSelector:withObject:afterDelay的变体。
如果您需要高分辨率计时器,请查看此技术说明。
NSTimer 和 performSelector 的分辨率都在 50-100 毫秒左右,这对于声音播放来说是不够的。
我建议您使用带有 mach_wait_until() 的单独实时线程,如技术说明中所述。使用技术说明中清单 2BEATS_PER_SEC
中的代码,每次using都会播放声音play_beat()
,如下所示:
void play_beat_thread(int argc, const char * argv[])
{
mach_timebase_info(&timebase_info);
uint64_t time_to_wait = nanos_to_abs(10ULL * BEATS_PER_SEC);
uint64_t next = mach_absolute_time();
while (true)
{
next = next + time_to_wait;
mach_wait_until(next);
play_beat();
}
}
如果您想获得有关高分辨率音频计时的更多建议,我建议您按照“如何在 iOS/OS X 上手动安排高分辨率音频播放”这一行重新构建这个问题。