2011-09-19 7 views
0

인사말 !!While 루프의 NSTimer

다음과 같은 코드가 내가 뭐하는 거지 지금 :

BOOL bJobDone = NO ; 
bBrickDropDone = NO ; //global var here !! 
NSTimer* timer = nil ; 

while(bJobDone==NO) 
{  

    if(timer == nil) 
    { 
     timer = [NSTimer scheduledTimerWithTimeInterval:0.3 
                 target:self 
                selector:@selector(dropBrick:) 
                userInfo:nil 
                repeats:YES]; 
    } 
    if(bBrickDropDone==YES) 
    { 
     bBrickDropDone = NO ; 
     [timer invalidate] ; 
     timer = nil ; 

     if([self MarkBrickBomb]==YES) 
     { 
      bJobDone = NO ; 
      [self dealBomb] ; 
      if([self AllClean]==YES) 
      { 
       bJobDone = YES ; 
       igameidx = igameidx + 1 ; 
      } 
     }else 
     { 
      bJobDone = YES ; 
     }    
    }//if(bBrickDropDone==YES) 

}//while bJobDone==NO 

당신이 볼 수 있듯이, 만약 한 번에 0.3 초, bBrickDropDone 마침내 = YES 경우 이 (dropBrick 기능이 수정을위한 타이머 호출 dropBrick 기능 YES something happen) 다른 함수 MarkBrickBomb을 처리하고 bJobDone = YES가 될 때까지 계속 진행하면서 루프를 벗어납니다!

내 코드가 좋지 않다고 생각합니다. while 루프에서 bBrickDropDone 플래그를 확인하면 안됩니다. 효율성이 떨어지고 비용도 많이 들기 때문에 !!

나는, 그래서이 경우 을 무엇을 할 수 여전히 (이, 내가 좋은 생각되지 않음) 동안 루프에서 완료 플래그를 확인 을 좋아하지 않아 구매하기, 애니메이션 UIImageView에 스위치를 얻을 수있는 타이머를해야합니까? 이것에 대한 힌트를 얻을 수 있을까요?

그리고 내 영어로 유감스럽게 생각합니다 !!

답변

1

NSTimers가 NSRunLoop에 추가되고 이벤트를 기다리는 동안에 만 발동 할 수 있기 때문에 bJobDone == NO 인 동안 타이머가 작동하지 않습니다.