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

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

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()
        })
    }
}

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

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

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