NSTimer导致一些奇怪的延迟

时间:2011-07-11 05:30:10

标签: objective-c ios nstimer

好的,我的第一个应用程序是计时器。在我按照惯例制作了你好的世界之后。我使用NSTimer类作为我的计时器,我每秒触发它然后我更改UILabel中的文本。现在这一切都非常好,除了我的第一次跑步。每次我在模拟器中运行应用程序并且我启动计时器时他们在我的最后一秒是一个奇怪的延迟,它将冻结大约2秒然后继续,好像什么都没有错。然后它适用于每个运行的集合。

以下是我设置NSTimer的代码:

theTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];

然后在onTimer方法中我调用updateLabel

countDownLabel.text = [NSString stringWithFormat:@"%02d:%02d", startMin,startSec];
//Check if sets are complete
if(setCount <= numOfSets)
{
    setLabel.text = [NSString stringWithFormat:@"Set %02d of %02d", setCount, numOfSets];
    //check if timer is complete
    if(startMin <= 0 && startSec <= 0)
    {
        countDownLabel.textColor = [UIColor greenColor];
        //run interval timer when timer is complete
        if(intervalBetweenSets <= intervalBetweenSetsSetting)
        {
            setLabel.text = [NSString stringWithFormat:@"Starting set"];
            intervalBetweenSets++;
            intervalCounterSec--;
            countDownLabel.text = [NSString stringWithFormat:@"00:%02d", intervalCounterSec];
        }
        else
        {
            //RESET values on timer label
            TimerSettings *myTimer = [TimerSettings sharedManager ];
            startMin = myTimer.min;
            startSec = myTimer.sec;
            intervalBetweenSets = 0;
            intervalCounterSec = intervalBetweenSetsSetting+1;
            countDownLabel.textColor = [UIColor redColor];
            countDownLabel.text = [NSString stringWithFormat:@"%02d:%02d", startMin,startSec];
            setLabel.text = [NSString stringWithFormat:@"Set %02d of %02d", setCount, numOfSets];
        }
    }
    else
    {
        //Actual timer for display
        if(startSec == 0)
        {
            startMin = startMin - 1;
        }
        startSec = startSec - 1;
        if(startSec == -1)
        {
            startSec = 59;
        }
        if(startMin <= 0 && startSec < 1)
        {
            //increment number of completed sets
            setCount++;
            //play sound when timer completes
            if (audioPlayer == nil)
                ;
            else
            {
                [audioPlayer play];
            }
        }

        countDownLabel.text = [NSString stringWithFormat:@"%02d:%02d", startMin,startSec];
    }
}

问题是我不知道计时器是否存在问题,或者它是否与我的逻辑有关,如果有什么不清楚我在做什么请随便问一下我会澄清。

由于

1 个答案:

答案 0 :(得分:1)

你不应该使用NSTimer来保留时间,如果这是你想要做的事情,NSTimers在概念上被放入事件提示中,因此只有当你的编程等待来自事件提示的输入时才会触发。你可以使用NSTimers来告诉你字段更新自己的显示但是要获得你应该使用NSDate方法或等效C函数的时间量。