2011-09-21 2 views
0

인사말 !!NSTimer 선택기 질문

내가 예를 들어 다음과 같은 기능을 한 : 나는 dropBrick 기능 이상 scheduledTimerWithTimeInterval을 할 경우는, 가능하다면 궁금

-(void) doMainBrick 
{ 
    NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:0.1 
                 target:self 
                selector:@selector(dropBrick:) 
                userInfo:nil 
                repeats:YES]; 
} 

-(void) dropBrick:(NSTimer*) timex 
{ 
    //deal something 
    [self SwitchBrick]; 
} 

(가 0.1 위 내 샘플에), 다른 통화 일 dropBrick 다시 (0.1 초마다 화재가 발생합니다 .Brick, 반복 : 예)? 또는 무엇이든 상관없이 NSTimer은 마지막 dropBrick 종료를 기다린 다음 해고됩니까?

답변

1

NSTimers은 RunLoop에 예약됩니다. 그들의 화재 시간이 경과 할 예정 약간의 타이머가있는 경우

  • 확인 :

    이는 RunLoop의 각 반복에서, 시스템은 다음을 수행 것을 의미한다. 그렇다면 연관된 메소드를 시작하십시오.

  • 다른 입력 소스 (RunLoop 등에서 예약 된 소켓과 같은)에 진행할 입력 데이터가 있는지 확인하십시오 (처리 할 경우 계속 진행하십시오).
  • 확인이 터치 ​​이벤트와 같은 보류중인 이벤트는, 그리고 그들을 처리하는 경우 (화재 관련된 행동)
  • 은 결과적으로
  • 으로 반복 다시

그리기 수행

  • NSTimer 타이머 자체에 의해 호출 된 call 이외에 직접 dropBrick을 수동으로 호출하면 걱정하지 않습니다.
  • b 타이머가 지정된 timeInterval보다 많은 시간이 걸리는 경우 RunLoop 반복이 끝날 때 메서드가 즉시 다시 시작됩니다. 다음 호출의 시작 날짜가 이미 경과했기 때문입니다. 내가입니다 생각할 수
0

하나 개의 아이디어 ...

은 반복 설정 : NO 및 dropBrick에게 재귀 호출 자체를 할 수 있습니다. 재귀 호출의 빈도를 제어하려면 몇 가지 절전 모드를 추가하십시오.