【Objective-C】コピペOK!NSTimerでsetTimeoutを実行する


こんにちは、カミ@god48_です。
今回は、プログラミングでよく使うTimer機能を使って、「◯秒後に処理を行う」という実装を行います。
「setTimeout」はJavaScriptでよく使うTimer機能の代表の一つです。
※JavaScriptのTimer機能のsettimeout方法
目次
NSTimerでタイマー(setTimeout)を実行方法

それでは本題のObjective-CのTimerを使っていきます。
Objective-CでTimerを使うには「NSTimer」オブジェクトを使います。
NSTimerは非常に簡単な実装ができます。

コピペで使うこともできますよ。
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(setTimeout:)
userInfo:nil
repeats:NO];
NSTimerの引数
引数名 | 引数の役割 |
scheduledTimerWithTimeInterval | タイマーの感覚 |
target | タイマー発生時に呼び出すメソッドがあるターゲット |
selector | タイマー発生時に呼び出すメソッド名 |
userInfo | selectorで呼び出すメソッドに渡す情報 |
repeats | タイマーの実行を繰り返しの有無 |
selector:@selector「関数名」でタイマーで呼び出したいメソッドをを呼び出せます。
タイマーで呼び出したいメソッドはクラス内に記述してください。
スポンサードサーチ
NSTimerでタイマー(setTimeout)を実行
@implementation ViewController
// 省略
- (void)viewDidLoad {
NSLog(@"viewDidLoad");
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(setTimeout:)
userInfo:nil
repeats:NO];
}
- (void)setTimeout:(NSTimer*)timer {
// タイマーをストップ
[timer invalidate];
// 1秒後に実行したい処理
NSLog(@"タイマー実行");
}
scheduledTimerWithTimeInterval:秒数
scheduledTimerWithTimeInterval:秒数で実行したい秒数感覚を指定して「selector:@selecto(メソッド)」でタイマーが動きます。
NSTimerメソッド
NSTimerメソッド中に複数のタイマーに関数のメソッドがあります。
タイマーを停止
[timer invalidate];

よく使うケースは呼び出したいメソッドが飛ばれた直後にタイマーを止めます。
- (void)setTimeout:(NSTimer*)timer {
// タイマーをストップ
[timer invalidate];
// 3秒後に実行したい処理
NSLog(@"タイマー実行");
}
タイマーが有効
[timer isValid];
Timerの有効、無効の判定で処理を行うことができます。
[timer isValid]を使うことで「Timer」の開始、停止を繰り返し使うこともできます。
// タイマーが有効だったら処理
if ([timer isValid]) {
NSLog(@"timer true");
}
タイマーを開始
[timer isValid]で判定を条件に処理を行うことができます。

例えばですが、タイマーが有効であれば、アラームをセットするなですね。
[timer fier];
Timerの有効、無効の判定で処理を行うことができます。
[timer isValid]を使うことで「Timer」の開始、停止を繰り返し使うこともできます。
// タイマーが無効だったら処理
if (![timer isValid]) {
[timer fier];
NSLog(@"timer start");
}