iPhone相当于Timer和TimerTask用于定期任务

时间:2011-09-27 16:24:32

标签: iphone objective-c ios4 timertask

我正在尝试将Android应用移植到iPhone上。在Android上,我可以使用带有TimerTasks的Timer类,使用scheduleAtFixedRate,每60秒轻松处理一次数据: timer.scheduleAtFixedRate(task,15000,epochLengthMs);

谢谢!

我可以在iPhone上使用类似的东西吗?

protected void startTimer(){

    if(timerStarted){
        //avoid duplicate timers! 
    }else{

        running = true;
        timerStarted = true;

        if(D)Log.w(TAG,"*Timer Started*");
        timer = new Timer();
        readyToProcess = true;
        EpochCounterTask task = new EpochCounterTask();
        AutoSaveTask saveTask = new AutoSaveTask();

        //give statMagnitude enough time to get values
        //after 15 sec, every 60 sec
        timer.scheduleAtFixedRate(task,15000, epochLengthMs);
        timer.scheduleAtFixedRate(saveTask,645000, 600000);

        }

}

3 个答案:

答案 0 :(得分:3)

您需要创建两个NSTimers - 一个用于纪元计数器,另一个用于自动保存任务。像这样:

- (void)startTimer {

if(timerStarted){
    //avoid duplicate timers! 
}else{

    running = true;
    timerStarted = true;

    readyToProcess = true;

    epochTimer = [[NSTimer scheduledTimerWithTimeInterval:epochSeconds 
                                        target:self
                                        selector:@selector(processEpochTimer:)
                                        userInfo:nil
                                        repeats:YES] retain];

    autosaveTimer = [[NSTimer scheduledTimerWithTimeInterval:autosaveSeconds 
                                        target:self
                                        selector:@selector(processAutosaveTimer:)
                                        userInfo:nil
                                        repeats:YES] retain];
    }
}

您还需要定义以下处理程序方法,这些方法在计时器触发时调用:

- (void)processEpochTimer:(NSTimer*)theTimer;
- (void)processAutosaveTimer:(NSTimer*)theTimer;

答案 1 :(得分:2)

查看NSTimer

答案 2 :(得分:2)

查看http://www.iphoneexamples.com/ 计时器

定时器 这个计时器每1秒调用一次myMethod。

[NSTimer scheduledTimerWithTimeInterval:1 
    target:self 
    selector:@selector(myMethod:) 
    userInfo:nil 
    repeats:YES];

如果您需要将对象传递给myMethod怎么办?使用“userInfo”属性。 1.首先创建Timer

[NSTimer scheduledTimerWithTimeInterval:1 
    target:self 
    selector:@selector(myMethod:) //don't forget the ":"
    userInfo:myObject 
    repeats:YES];
  1. 然后将NSTimer对象传递给您的方法:

    - (void)myMethod:(NSTimer *)计时器       //现在我可以访问myObject的所有属性和方法       [[timer userInfo] myObjectMethod];

  2. 要停止计时器,请使用“invalidate”:

    [myTimer invalidate];
    myTimer = nil; // ensures we never invalidate an already invalid Timer