iPhone эквивалент Timer и TimerTask для периодических задач - PullRequest
3 голосов
/ 27 сентября 2011

Я пытаюсь портировать приложение Android на iPhone.На Android я мог легко обрабатывать данные каждые 60 секунд, используя класс Timer с TimerTasks, используя scheduleAtFixedRate: 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 ]

3 голосов
/ 27 сентября 2011

Вам нужно будет создать два 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;
2 голосов
/ 27 сентября 2011

взгляните на http://www.iphoneexamples.com/ Таймер

Таймеры Этот таймер будет вызывать myMethod каждую 1 секунду.

[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 *) timer // ТеперьЯ могу получить доступ ко всем свойствам и методам myObject [[timer userInfo] myObjectMethod];

Чтобы остановить таймер, используйте «invalidate»:

[myTimer invalidate];
myTimer = nil; // ensures we never invalidate an already invalid Timer
2 голосов
/ 27 сентября 2011

Взгляните на NSTimer

...