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 の上で動くのか、ということになります。
- 生成と同時に呼び出し元の RunLoop 上でタイマーが作動します。なので、このメソッドを呼び出したら、あとは何もしなくても時間が経ったら設定した発火メソッドが呼び出されます。
- NSTimer のオブジェクトを返してくれるだけです。RunLoop に追加しないかぎりタイマーとして動くことはありません。
つまるところ、とにかく簡易に動かしたければ(1)で、任意の RunLoop で動かしたいなら(2)を使いましょう。