LoginSignup
21
17

More than 5 years have passed since last update.

NSTimer の fireって使えないとばっかり思ってたが、使用方法が違ってた。

Last updated at Posted at 2015-09-28

発端

[ NSTimer fire ];

NSTimer で fire は、再開と思ってたのですが、実際停止後に実行しても再開しないから 使えないじゃんと思ってたし、実際再開しなかった。(大きな勘違いなんですが・・・)
Google様に聞いてもそのように見える記事もあって、そうだと今まで思ってた。
ふと、再開なのになんで 名前がfire(発火する) なのかなと疑問になって、使用方法がちがう可能性があると思い実験してみました。

確認

環境
Xcode7
IOSシミュレーター

プログラム

NSTimer *timerObj=nil;
-(void)startTimer
{
    if( !timerObj )
    {
        NSLog(@"timerStart");
        timerObj = [ NSTimer scheduledTimerWithTimeInterval:5.0f    //インターバル
                                                     target:self    //ターゲット
                                                   selector:@selector(sysTimer:)
                                     //メソッド
                                                   userInfo:nil     //パラメータ
                                                    repeats:YES     //繰り返し
                    ];
    }
}
-(void)stopTimer
{
    [timerObj invalidate];  //停止
    timerObj=nil;           //停止したらオブジェクト削除
}
-(void)sysTimer:(NSTimer*)timer
{
    NSLog(@"timerProc");
    //
    //  インターバルタイマー処理
    //
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"fire");
    [timerObj fire];
}

方法
 [self startTimer];実行後にTapする

実験1 repeatsパラメータをNOにして確認した(繰り返しなしの場合) 結果
・インターバルタイマー実行後 fire 実行しても何も起こらなかった。( ← Google様の言うとうり)
・インターバルタイマー実行前(5s内)fire 実行で timerProcログがすぐ出てきた。( キター )

実験2 repeatsパラメータをYESにして確認した(繰り返しの場合) 結果

・インターバルタイマー実行後 fire 実行で timerProcログがすぐ出てきた。( キター )
・インターバルタイマー実行タイミングでも timerProcログがすぐ出てきた。( そーなんだ )

結論

fire は、インターバルタイマメソッドを即実行する(発火)メソッドである。
再開でなく タイマーインスタンスが有効期間内で使用するものである。

まとめ

repeatsパラメータがNOの場合
 通常は、

b.png 
指定インターバル時間後にメソッドが実行されます。

 指定インターバル時間以内でfireした場合

b.png
即メソッド実行します。
注意:(指定インターバル時間ではメソッドの実行はしない)

repeatsパラメータがYESの場合
 通常は、

a.png
指定インターバル時間毎にメソッドが実行されます。

 指定インターバル時間以内でfireした場合

a.png
即メソッド実行しますが、指定インターバル時間毎にもメソッド実行します。
実行前倒しになるのかなと思ったが、そうではないらしい

これだから fire なのね。納得!!!
invalidateは、無効だから停止というよりも解放に近い意味合いなんだ。だから再設定しないと動かないんだな
なるなる

21
17
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
17