2014-09-20 3 views
0

Возможно ли сделать таймер в Xcode 6 без использования NSTimer? Под этим я подразумеваю, что вы можете указать приращение времени для повторения определенного количества кода? Или добавить, возможно ли сделать NSTimer, у которого нет селектора, который выбирает другой метод, просто продолжает код внутри того же метода, в котором реализуется NSTimer?Создание таймера (быстро) без NSTimer

+0

"Возможно ли это?" вопросы всегда имеют три потенциальных ответа: «Да, это возможно», «Нет, это невозможно» и «Возможно, в зависимости от того, что вы имеете в виду именно». Какой из этих трех ответов вы примете как правильные и полезные? Если ответ «Ничего из вышеизложенного», то вам нужно повторить свой вопрос, чтобы быть более конкретным, чем «Возможно ли это?», И вы должны [изменить] сделать это. (Если один из них на самом деле то, что вы хотите, сообщите мне, и я отправлю его как ответ вместо этого, чтобы вы могли принять его.) –

ответ

1

Возможно построить сценарий, описанный в вашем сообщении. Следующий код показывает основную идею того, что я сделал бы, чтобы имитировать таймер без NSTimer. Обратите внимание, что по умолчанию код использует NSThread, иначе вы можете установить useGCD true для отправки с использованием GCD.

class Timer: NSObject { 

    var interval = 1.0 // Interval at 1.0 second 
    var useGCD = false // Set true to use GCD 

    var _isTimerRunning = false 

    func start() { 
     if !_isTimerRunning { 
      if !useGCD { 
       var thread = NSThread(target: self, selector: Selector("timerFunction"), object: nil) 
       thread.start() 
      } else { 
       var queue = dispatch_queue_create("com.example.threading", nil) 
       dispatch_async(queue, { 
        self.timerFunction() 
       }) 
      } 
      _isTimerRunning = true 
     } 
    } 

    func stop() { 
     _isTimerRunning = false 
    } 

    func timerFunction() { 
     while (_isTimerRunning) { 
      /* 
      * TO-DO Designated code goes here 
      */ 
      NSThread.sleepForTimeInterval(interval) // Interrupt 
     } 
    } 
} 

Запуск таймера:

var timer = Timer() 
timer.start() 

С уважением

0

Можете ли вы использовать функцию задержки? Устанавливайте внутри цикла многократный огонь.

delay (5.0) { 

//code to execute here 

} 

func delay(delay:Double, closure:()->()) { 
     dispatch_after(
      dispatch_time(
       DISPATCH_TIME_NOW, 
       Int64(delay * Double(NSEC_PER_SEC)) 
      ), 
      dispatch_get_main_queue(), closure) 
    } 
Смежные вопросы