2010-11-27 5 views
2

NSTimer를 실행할 수있는 가장 빠른 방법은 무엇입니까? 나는 그것이 30ms에 접근하는 것은 쓸모 없게되는 것을 읽었다. 그래서 어디에서 "쓸모 없게되기 시작한다"... 40ms? 50ms?NSTimer를 실행해야하는 가장 빠른 방법은 무엇입니까?

+0

빠른 실행, 반복, 타이머는 피해야합니다. 그들은 배터를 소비하고 응용 프로그램을 응답하지 않는 경향이 있습니다. – bbum

+0

[빈도가 높은 NSTimer 사용?] (http://stackoverflow.com/questions/4289588/using-an-nstimer-at-high-frequencys) –

+0

@bbum "빠른 실행, 반복 타이머는 피해야합니다 "... NSTimer 인스턴스 또는 디자인 문제를 언급하고 있습니까? 또한, NSTimer보다 빠른 대안이 있습니까? MIDI를 푸시하기 위해 CADisplayLink 60fps보다 빠릅니다. –

답변

4

the docs :

타이머의 시간 간격의 유효 해상도가 에 제한됩니다

50 ~ 100 밀리 초

의 순서에 당신이 원하는 경우처럼 소리 안전하다면 타이머를 0.1 초 미만으로 사용해서는 안됩니다. 하지만 자신의 앱에서이 앱을 사용해 보면서 왜 저조한 모습을 보지 않으시겠습니까?

귀하는 이에 대해 보증을하지 않습니다. NSTimers는 이벤트 루프로 실행되기 때문에 기회가 많습니다. 효과적인 최상의 세분성은 Cocoa 타이머 디스패치 메커니즘의 한계에 추가하여 앱에서 진행되는 모든 작업에 따라 달라집니다.

+0

감사합니다. GCD를 사용하여 직접 작성하는 것 외에도 이보다 더 빠를 수있는 권장 방법이 있습니까? –

+1

@DanRosenstark (6 년 후 ...) 당신이 필요로하는 것에 달렸습니다. 'CADisplayLink'는 60 분의 1 초에 당신을 데려다 줄 것 같아요. 디스플레이 타이밍 주위에 약간의 경고가 있습니다. 실시간 또는 초 정밀도를 보장해야하는 것이 필요한 경우 최선의 접근 방법에 대해 새로운 질문을해야합니다. 행운을 빕니다! –

1

수행하려는 결과에 따라 다릅니다. NSTimer Class0.5 - 1.0은 신뢰할 수있는 결과를 얻기에 좋은 장소입니다.

2

신뢰할만한 정의는 무엇입니까? 1 초 타이머에서 16mS 오류는 2 % 오류 미만이지만 30mS 타이머에서는 50 % 오류 이상입니다.

NSTimers는 현재 실행 루프에서 발생하는 모든 작업이 완료 될 때까지 기다리고 시간에 따른 오류가 누적 될 수 있습니다. 예 : 디스플레이를 N 번 터치하면 모든 후속 NSTimer 반복 실행이 누적 시간 0부터 N까지 처리기 ("잘못된"시간에 실행중인 다른 모든 항목)에 의해 늦어 질 수 있습니다.

CADisplayLink 타이머는 전경 작업의 집합이 프레임 시간만큼 오래 걸리지 않는다고 가정하고 프레임 속도에 대한 시간을 양자화하려고 시도합니다.

관련 문제