我正在寻找一个Objective-C函数来调用函数以指定的间隔(2到5秒之间)更新UI。可以使用(粗略地)像这种伪代码的东西:
array[String]; // already populated
function1(){
if (array.hasMoreElements()){
call function2() in x seconds;
}
}
void function2(){
update gui with next string in the array;
function1();
}
我根本无法使用sleep()x秒,因为GUI会变得无法响应;我无法创建新线程来更新GUI,因为iOS UI元素不是线程安全的。
我已经研究了ualarm(),但它已经陈旧且非常粗糙,有人告诉我iOS库中有类似的实用程序;但是我找不到它。
答案 0 :(得分:5)
你在谈论Obj-C,但写的是类似C伪代码的东西。如果你真的写了正常的Obj-C,-performSelector:withObject:afterDelay
就是你想要的普通家庭。 (您可以在iOS 4.x及更高版本上使用“块”)。例如,在您的用例中:
- (void)displayNextString
{
if ([strings count] > 0) {
[self updateUIwithString:[strings objectAtIndex:0]];
[strings removeObjectAtIndex:0];
[self performSelector:@selector(displayNextString) withObject:nil afterDelay:2.0];
}
}
答案 1 :(得分:3)
您可以使用NSTimer。此API完全符合您的要求。
您可以简单地定义类似
的方法-(void)updateUI {
//update interface
}
然后执行类似
的操作NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(updateUI) userInfo:nil repeats:YES];
这样计时器将继续调用您设置的方法。检查参考以了解如何停止或使计时器无效。