LoginSignup
13
9

More than 5 years have passed since last update.

NSTimerをメインスレッドで使用した時、タイムアップにずれが生じた

Posted at

結論

NSTimerを別スレッドで動かすようにする。

別スレッドで動かすためには?
NSRunLoopをかませてTimerを動かせば別スレッドで処理が行える

let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeUp:"), userInfo: nil, repeats: false)

NSRunLoop.currentRunLoop().addTimer(dismissTimer!, forMode: NSRunLoopCommonModes)

func timeUp(timer: NSTimer) {
   // タイマー完了
}

背景

NSTimerのタイムアップでボタンのイメージを切り替えていく処理を作成したのですが、同画面に配置しているUIWebViewを動かし続けると、タイマーの完了のメソッドが発火しなかった。

その時(メインスレッドでTimerを動かす時)の処理は下記のような書き方。

let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeUp:"), userInfo: nil, repeats: false)

func timeUp(timer: NSTimer) {
   // タイマー完了
}

上記書き方だと、タイマーがメインスレッドで実行され、UIWebViewなどの操作とバッテイングしてタイマーの完了のメソッドが発火しなかったようです。

参考

13
9
0

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
13
9