itok's Lab

昔の開発ネタを記録として残してます

NSTimer を使う

ごくごく基本的なことなんですが、何度かはまってしまったので、備忘録として。

NSTimer の生成にはおおまかに2種類のメソッドがあります。

// NSTimer
1: +(NSTimer*) scheduledTimerWithTimeInterval:(NSTimeInterval)ti
    target:(id)aTarget
    selector:(SEL)aSelector
    userInfo:(id)userInfo
    repeats:(BOOL)yesOrNo;
2: +(NSTimer*) timerWithTimeInterval:(NSTimeInterval)ti
    target:(id)aTarget
    selector:(SEL)aSelector
    userInfo:(id)userInfo
    repeats:(BOOL)yesOrNo;

NSTimer は RunLoop の上で動作するわけですが、上の似たような2つのメソッドの違いは、どの RunLoop の上で動くのか、ということになります。

  1. 生成と同時に呼び出し元の RunLoop 上でタイマーが作動します。なので、このメソッドを呼び出したら、あとは何もしなくても時間が経ったら設定した発火メソッドが呼び出されます。
  2. NSTimer のオブジェクトを返してくれるだけです。RunLoop に追加しないかぎりタイマーとして動くことはありません。

つまるところ、とにかく簡易に動かしたければ(1)で、任意の RunLoop で動かしたいなら(2)を使いましょう。