obj*_*001 1 objective-c nstimer
recordingTimer = [NSTimer scheduledTimerWithTimeInterval:0.03
target:self
selector:@selector(recordingTimerSelector:)
userInfo:nil
repeats:YES];
Run Code Online (Sandbox Code Playgroud)
这需要非常准确.我一直在尝试它,它似乎不时跳过一个节拍.是否有更好的方法每隔0.03秒运行一次方法?
NSTimer的分辨率为50到100毫秒,或0.05到0.1秒.您可以尝试CADisplayLink.
CADisplayLink* link = [CADisplayLink displayLinkWithTarget:self selector:@selector(doSomething)];
link.frameInterval = 2;//thirty times a second
[link addToRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
Run Code Online (Sandbox Code Playgroud)
那会把你的方法称为每秒三十次.
编辑:我搜索了CADisplayLink的分辨率,但找不到太多,所以我自己做了一些测试.
我修改了一些使用mach_absolute_time()记录帧速率的现有代码,以打印调用我设置为由CADisplayLink调用的方法之间的间隔(以毫秒为单位).我在CADisplayLink和NSTimer的调用之间进行了几百个时间间隔的测试.CADisplayLink的平均偏差(从目标时间开始)为十分之三毫秒,而NSTimer的平均偏差为半毫秒.考虑到只有少数精灵渲染到屏幕上,这在准确性上是一个不错的差异.CADisplayLink准确度提高了40%.
因此,我的结论是,如果您希望每秒调用一个方法60/n(其中n是整数),则CADisplayLink非常优越.你也可以尝试在不同的线程上运行,而不是那么多.这也可能提高通话的准确性.
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |