我的一个场景中有这句话:
[self schedule:@selector(storeValue:) interval:1.0/30.0];
storeValue 非常基本且快速。它只是将层的位置存储在 NSMutableArray 上。我需要尽可能精确地调用这个 storeValue,但是在进行一些测量之后,这些是每个 storeValue 调用之间测量的间隔:
interval 0 = 0
interval 1 = 0.049962
interval 2 = 0.033345
interval 3 = 0.033332
interval 4 = 0.049994
interval 5 = 0.050050
interval 6 = 0.049968
interval 7 = 0.033998
interval 8 = 0.049331
interval 9 = 0.050015
interval 10 = 0.049979
interval 11 = 0.049999
interval 12 = 0.033357
interval 13 = 0.033307
interval 14 = 0.049997
interval 15 = 0.033322
interval 16 = 0.050317
interval 17 = 0.049743
interval 18 = 0.049973
interval 19 = 0.033322
interval 20 = 0.050024
interval 21 = 0.049975
interval 22 = 0.049987
interval 23 = 0.033316
interval 24 = 0.050038
interval 25 = 0.050149
interval 26 = 0.049852
interval 27 = 0.049989
interval 28 = 0.050011
因此,如您所见,该方法以各种间隔调用,而不是始终为 0.03333 (1 / 30)。
我试图从 storeValue 中删除所有代码,以查看 storeValue 被调用的频率并获得相同的不规则时间。
最大的问题是:我应该怎么做才能提高进度精度?我应该使用 NSTimer 吗?GCD 还有其他执行计划任务的方法吗?有什么建议么?
谢谢。
注意:我现在发现如果我设置间隔 = 0,storeValue 将在每一帧被调用,这意味着 1/60 秒并且精度非常好。好的,我可以制定一个逻辑来调用 storeValue 一半的时间,但很高兴知道为什么调度如此不精确以及是否有办法改进它。