iOS(目标C)版本的ualarm()

时间:2011-09-19 16:31:15

标签: objective-c ios user-interface

我正在寻找一个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库中有类似的实用程序;但是我找不到它。

2 个答案:

答案 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];

这样计时器将继续调用您设置的方法。检查参考以了解如何停止或使计时器无效。