NSTimerの挙動

2010/11/07

タイマーで定期時間に処理をさせる場合、NSTimer scheduledTimerWithTimeIntervalを利用しますが、

状況によっては、発動したりしなかったりする

まず、基礎的なコードは以下の通り。

- (void)play {
    NSLog(@"---- play ----");
    timer = [NSTimer scheduledTimerWithTimeInterval: 1.0f
                                             target: self
                                           selector:@selector(updateTimer:)
                                           userInfo: nil
                                            repeats:YES];
}

- (void)updateTimer:(NSTimer *)timer {
        NSLog(@"---- updateTimer ----");
}

これをviewDidLoad内のスコープで動作させたのですが、タイマーが(selector)発動しませんでした。 同じ処理を簡単なサンプルで動かした場合は発動しました。

同じスコープ内に時間のかかる処理をさせてはいけない?

という事なんですかね?

Second Flush NSTimerクラスによると、NSRunLoopでスレッドの監視が起因しているようですが、まだ詳しくは読んでないのでちゃんとしたロジックはわかりません。 しかし、上記のサイトは素人とか言いながら、かなり濃いトピックが載っている感じで参考になりそう。