

NSTimerを勉強中なのですが、下記のような流れを試しています。

タイマ開始→タイマがタイムアウト→タイムアウトしたらタイマを開始→…とめるまで続く  
（今回はrepeats: trueとしないで繰り返そうとしています）

[code]

    class TimerTest: NSObject {
        private ver testTimer: NSTimer!
    
        ～～省略
    
        func startTimer() {
            NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "testTimerTimeOut", userInfo: nil, repeats: false)
        }
        func testTimerTimeOut() {
            dispatch_barrier_async(dispatch_get_global_que(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {
                self.startTimer()
            })
        }
    }
    
[/code]

別のクラスからstartTimer()を呼ぶことで、testTimerTimeOutが呼ばれることは確認できました。  
その後、testTimerTimeOut内のstartTimerが再度呼ばれることまではブレイクを張って確認できたのですが、  
以降、testTimerTimeOut()が呼ばれることはありませんでした。  
GCD勉強中のため処理をtestTimerTimeOut()処理内でdispatch_barrier_asyncを使用しているのですが、  
とくにそのほかでDISPATCH_QUEUE_PRIORITY_HIGHのタスクは使用していません。  
これが悪いのか…と思い、タスク処理の外に出したところ、タイマは繰り返し、起動→タイムアウト→…を繰り返してくれました。

[code]

    func testTimerTimeOut() {
        dispatch_barrier_async(dispatch_get_global_que(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {
            // self.startTimer()
        })
        self.startTimer()
    }
    
[/code]

NSTimer()はタスク内で呼ぶことはできないのでしょうか。


CC BY-SA 3.0
2016-02-15T10:59:37.723
22109
2016-02-15T11:12:22.343
2016-02-15T11:12:22.343
8000
12842
question
swift
NSTimerが繰り返さない