5秒后调用方法。没有NSTimer

时间:2011-07-05 11:47:29

标签: ios objective-c

我想在iphone中调用任何方法OR事件,而不使用NStimer。

3 个答案:

答案 0 :(得分:13)

使用 performSelector:withObject:afterDelay:方法。

[self performSelector:@selector(methodName) withObject:nil afterDelay:5];

答案 1 :(得分:9)

或使用GCD:

double delayInSeconds = 5.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    /* code to be executed on the main queue after delay */
});

答案 2 :(得分:0)

这个问题听起来像是一个毫无意义的任务。这需要一个同样无用的答案:

sleep(5);
[self myMethodToCallAfter5Seconds];

编辑:由于人们似乎不喜欢我的回答,这里有一些想法:

OP要求在延迟后发送消息的方法。他没有使用NSTimer明确要求一种方法来做到这一点,但他没有说明原因。由于有许多方法可以在延迟后发送消息,因此选择一个消息取决于避免使用任何特定方法的原因。不知道拒绝明显方法的原因只有猜测。

一种可能的情况可能是没有应该等待延迟的runloop的后台线程。在阻止线程不是问题时,我的(不是完全严重的)提议甚至可能是一个合适的解决方案。在这种情况下,既不能使用NSTimer也不能performSelector:withObject:afterDelay:

我添加了这个答案,以突出这个问题没有理由而没有意义的事实。正如我的答案符合规范,它表明了问题的无意义。