つまり、基本的に、このタイマーはキーイベントを受信したときに繰り返され、ユーザーがキーを離したときに無効になります。addTimer:forMode:
ただし、 NSRunLoopでを呼び出しても、タイマーを「検証」することはできません。なぜこれが起こっているのか、そしてどうすればこれを修正できるのか誰かが知っていますか?ありがとう。
2 に答える
無効なタイマーは使用できません。
Apple Docsから:
実行ループでスケジュールされると、タイマーは無効になるまで指定された間隔で起動します。非反復タイマーは、起動直後にそれ自体を無効にします。ただし、タイマーを繰り返す場合は、invalidateメソッドを呼び出してタイマーオブジェクトを自分で無効にする必要があります。このメソッドを呼び出すと、現在の実行ループからタイマーを削除するように要求されます。その結果、タイマーがインストールされたのと同じスレッドから常にinvalidateメソッドを呼び出す必要があります。タイマーを無効にするとすぐに無効になり、実行ループに影響を与えなくなります。次に、runループは、invalidateメソッドが戻る直前、または後の時点で、タイマーを削除して解放します。無効にすると、タイマーオブジェクトは再利用できなくなります。
NSTimerを無効にした後は、それを再度使用しないでください。
代わりに、新しいタイマーインスタンスを作成し、そのインスタンスを使用してNSRunLoopのaddTimerメソッドに追加します。個人的には、NSTimerのscheduledTimerWithTimeIntervalを呼び出すことを好みます。これは、すべてを1回のショットで実行するためです。
NSTimerドキュメントから:
このメソッドを呼び出すと、現在の実行ループからタイマーを削除するように要求されます。その結果、タイマーがインストールされたのと同じスレッドから常にinvalidateメソッドを呼び出す必要があります。タイマーを無効にするとすぐに無効になり、実行ループに影響を与えなくなります。次に、runループは、invalidateメソッドが戻る直前、または後の時点で、タイマーを削除して解放します。無効にすると、タイマーオブジェクトは再利用できなくなります。