NSTimerでinitとscheduledTimerWithTimeIntervalは別物ということを知った話
NSTimerで処理を書いた際、repeatsをtrueにしているのに繰り返し処理してくれないで悩んだことがあった。
initメソッドの
public /*not inherited*/ init(timeInterval ti: NSTimeInterval, target aTarget: AnyObject, selector aSelector: Selector, userInfo: AnyObject?, repeats yesOrNo: Bool)
とclassメソッドの
public class func scheduledTimerWithTimeInterval(ti: NSTimeInterval, target aTarget: AnyObject, selector aSelector: Selector, userInfo: AnyObject?, repeats yesOrNo: Bool) -> NSTimer
は別物ということを教わった。
昔やった気もするし、今更な話ではあるが。
処理の違いとして下記の差がある。両方は同じ処理をする作りとなっている。
// 自動発火&自動repeat let timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: #selector(hoge), userInfo: nil, repeats: true)
// repeatさせない際、fire()で発火必要 // repeatさせる際、NSRunLoopを使用する処理が必須(自動発火するのでfire()は不要) let timer = NSTimer(timeInterval: 0.5, target: self, selector: #selector(hoge), userInfo: nil, repeats: true) let runLoop = NSRunLoop.currentRunLoop() runLoop.addTimer(timer, forMode: NSRunLoopCommonModes)