シーンの 1 つに次の行があります。
[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スケジュールされたタスクを実行する他の方法はありますか? 助言がありますか?
ありがとう。
注: interval = 0 に設定すると、storeValue がフレームごとに呼び出されることを発見しました。これは、1/60 秒を意味し、精度が素晴らしいことを意味します。OK、半分の時間で storeValue を呼び出すロジックを作成できますが、スケジュールがそれほど不正確である理由と、それを改善する方法があれば教えていただければ幸いです。