在While循环中的NSTimer

时间:2011-09-19 08:41:31

标签: iphone objective-c while-loop 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 个答案:

答案 0 :(得分:1)

计时器永远不会在bJobDone == NO时触发,这是因为NSTimers被添加到NSRunLoop并且只能在等待事件时触发。