2012-08-14 10 views
0

저는 Xcode를 사용하여 타이머를 구현하고 그 시간부터 계산을 실행했습니다. 그러나 종종 타이머는 모든 계산을 버리는 인터 레이션을 건너 뛸 것입니다.xcode 타이머를 사용하는 중 오류가 발생했습니다.

- (void)Time 
{ 

    if (running==false) return; 

    NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate]; 
    NSTimeInterval elapsed = currentTime - startTime; 

    int mins = (int) (elapsed/60.0); 

    elapsed -= mins* 60; 
    int seconds = (int) (elapsed); 
    elapsed -= seconds; 
    int fraction = elapsed * 100.0; 
    beepTime = [self Dec:seconds+elapsed]; 



    [self mod]; 



    label.text= [NSString stringWithFormat:@"%u:%02u.%.01u",mins,seconds,fraction/10]; 



    [self performSelector:@selector(Time) withObject:nil afterDelay:0.01]; 


} 

여기에 BP 50.730000 및 MT 8.380000가 생략 된

2012-08-14 20:25:04.659 RT 8.470000 BP 50.710000 MT 8.360000 
2012-08-14 20:25:04.671 RT 8.470000 BP 50.720000 MT 8.370000 
2012-08-14 20:25:04.682 RT 8.470000 BP 50.740000 MT 8.390000 

참고 일부 로그의 작은 샘플입니다.

제안 사항?

건배!

답변

1

-performSelector : withObject : afterDelay의 설명서를 읽는 경우 메시지가 0.01 초 지연된 후에 정확하게 전송된다고 보장 할 수 없습니다. 대신 메시지가 0.01 초 후에 이벤트 대기열에 놓이고 차례가 될 때마다 발생한다는 메시지가 표시됩니다.

NSTimer의 메소드 + scheduledTimerWithTimeInterval을 사용하면 더 편리 할 수도 있습니다. target : selector : userInfo : repeats :.

EventHough 타이머는 performSelector와 비슷하게 현재 실행 루프에서도 작동하며 적어도 0.01 + (시간 메서드 본문을 실행하는 데 걸리는 시간)에는 실행되지 않습니다.

NSTimer 메서드를 한 번만 호출하고 반환 된 값을 사용하여 타이머를 무효화해야합니다.

관련 문제