iOSのタイマー – NSTimerとGCDタイマー

iOSでは、NSTimerやGCDでタイマー実装が可能だ。

  1. NSTimer:

NSTimer は、 Foundation フレームワークにおけるクラスで、タイマーを作成するために使用できます。その使用法は比較的単純で、時間間隔と繰り返し回数を指定することで、タイマーを作成することができます。また、タイマーが発火した後、実行するメソッドを指定することができます。

NSTimerを利用して、1秒ごとに実行されるタイマーを作成できます:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];

上のコードでは、`scheduledTimerWithTimeInterval`メソッドによってタイマーが作成されます。最初の引数は時間間隔を指定し、2番目の引数はタイマーがトリガーされた後に呼び出されるメソッドを指定し、3番目の引数はタイマーのコールバックメソッドに追加情報を渡すことができ、最後の引数の`repeats`はタイマーの繰り返し実行を指定します。

  1. 送信用タイマー:

Grand Central Dispatch(GCD)はAppleが提供するマルチコアプログラミングのソリューションで、タイマーを作成できます。GCDのタイマーはNSTimerより柔軟性が高く、メインスレッドまたはバックグラウンドスレッドでタスクを実行でき、dispatch_source_set_timerのパラメータを設定することで、(1回だけ実行するか繰り返し実行するかなど)さまざまなタイマーの動作を実現できます。

たとえば、GCDを利用して1秒ごとに実行されるようなタイマーを作成できます。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
// 定时器触发后要执行的任务
});
dispatch_resume(timer);

前述のコードでは、まず GCD によるタイマーを作成し、続いて dispatch_source_set_timer メソッドを使用してタイマーのパラメータを設定しました。タイマーのパラメータには、タイマーのタイプを DISPATCH_SOURCE_TYPE_TIMER と指定する最初の引数、タイマーが最初にトリガーされる時間を指定する 2 番目の引数、タイマーのトリガー間隔時間を指定する 3 番目の引数、およびタイマーの精度を指定する最後の引数が含まれます。最後に、dispatch_source_set_event_handler メソッドを使用してタイマーがトリガーされると実行するタスクを設定し、dispatch_resume メソッドを使用してタイマーを起動しました。

NSTimerやGCDタイマーを使用する場合は、実行するタスクの中でUIを更新する必要がある場合は、必ずメインスレッド上で更新処理を実行する必要があります。

bannerAds