2011-09-19 67 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 

正如你可以看到,計時器調用dropBrick功能,一次0.3秒, 如果bBrickDropDone終於= YES(dropBrick功能修改爲yes,如果有事發生) 它會處理另一個函數MarkBrickBomb並繼續下去,直到bJobDone = YES,跳出循環!

我覺得我的代碼很糟糕,我不應該在while循環中檢查bBrickDropDone標誌,因爲它效率不高,也會花費很多資源!

我需要一個計時器,以得到一個動畫的UIImageView開關,買還是不喜歡 檢查完成標誌在while循環(這是不好的,我覺得),所以我能在這種情況下做 ?我能得到這個提示嗎?

而且,對不起,我的英語!

回答

1

定時器永遠不會開火,而bJobDone == NO,這是因爲,NSTimers被添加到NSRunLoop並且只能在等待事件時觸發。