2014-09-20 3 views
0

NSTimer를 사용하지 않고 Xcode 6에서 타이머를 만들 수 있습니까? 이 말은 일정한 양의 코드를 반복하기 위해 시간 단위를 지정할 수 있다는 뜻입니까? 또는 NSTimer가 구현하는 것과 동일한 메서드 내에서 코드를 계속 수행하는 다른 메서드를 선택하는 셀렉터가없는 NSTimer를 만들 수 있습니까?NSTimer를 사용하지 않고 타이머를 만들 때

+0

"이 가능합니까?" 질문에는 항상 세 가지 잠재적 인 대답이 있습니다. "예, 가능합니다", "아니요, 불가능합니다", "어쩌면 당신이 정확히 무엇을 의미 하느냐에 따라 달라집니다". 다음 세 가지 대답 중 어느 것이 정확하고 도움이되는 것으로 받아들입니까? 대답이 "위에 없음"이라면 "가능합니까?"보다 구체적으로 질문을 다시 써야합니다. 그렇게하려면 [편집]해야합니다. (만약 그들 중 한 명이 사실 당신이 원한다면, 알려주세요. 대신 답변으로 게시하여 받아 들일 수 있습니다.) –

답변

1

게시물에 설명 된대로 시나리오를 작성할 수 있습니다. 다음 코드는 NSTimer없이 타이머를 시뮬레이트하기 위해 수행 할 작업의 기본 아이디어를 보여줍니다. 기본적으로 코드는 NSThread를 사용하고 있습니다. GCD를 사용하여 useGCD를 true로 설정하여 디스패치 할 수도 있습니다.

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) 
    } 
관련 문제