NSResponderのkeyDown()とI/OKitのIOHIDManagerのInputValueCallbackの反応速度の違い

ナノ秒の精度で時間を計測できる mach_absolute_time() で検証しました。 NSResponderはSpriteKitのシーンが保持するとあるSKNodeで,keyDown()時の速さを測定しました。 ちなみにSKNodeはfirstResonderになっています。

結論

ものすごくざっくり言うと,I/OKitのHIDManagerでハンドリングした方が常に早く,NSResponderのkeyDown()よりも大体1.5ms〜3ms早く反応します。どちらもメインスレッドでコールバックが呼ばれます。

I/OKitでkeyboardの入力を取るのはものすごーく大げさな実装になって面倒なのですが,タイミングがシビアなアプリケーションを作る際にはI/OKitを採用する価値がありそうです。