我正在尝试将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);
}
}
答案 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];
然后将NSTimer对象传递给您的方法:
- (void)myMethod:(NSTimer *)计时器 //现在我可以访问myObject的所有属性和方法 [[timer userInfo] myObjectMethod];
要停止计时器,请使用“invalidate”:
[myTimer invalidate];
myTimer = nil; // ensures we never invalidate an already invalid Timer