Ios 5秒后调用一个方法。没有NSTimer
我想在iphone中5秒钟后调用任何方法或事件,而不使用NStimer。使用PerformSelect:withObject:afterDelay:method 或使用GCD:Ios 5秒后调用一个方法。没有NSTimer,ios,objective-c,Ios,Objective C,我想在iphone中5秒钟后调用任何方法或事件,而不使用NStimer。使用PerformSelect:withObject:afterDelay:method 或使用GCD: double delayInSeconds = 5.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispat
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 */
});
这个问题听起来像是一个毫无意义的任务。这需要一个同样无用的答案:
sleep(5);
[self myMethodToCallAfter5Seconds];
编辑:由于人们似乎不喜欢我的答案,以下是一些想法:
OP询问了一种在延迟后发送消息的方法。他明确提出了一种不使用NSTimer
的方法,但没有具体说明原因。由于有许多方法可以在延迟后发送消息,因此选择一种方法取决于避免使用任何特定方法的原因。不知道拒绝一个显而易见的方法的原因只有猜测
一种可能的情况是后台线程没有等待延迟的runloop。在这里,当阻塞线程不是问题时,我的建议(不是完全严肃的)甚至可以是一个合适的解决方案。在此场景中,既不能使用NSTimer
也不能使用performSelector:withObject:afterDelay:
我添加这个答案是为了强调一个事实,即如果不给出理由,这个问题就没有什么意义。当我的答案符合规范时,它显示了问题的无意义。+1因为这就是我使用它的方式,因为它允许使用多个参数的复杂方法调用。如何停止调用视图中的此方法将消失?那么为什么不
int t=time(NULL);while(time(NULL)@mvds我想你是在挖苦人。然而,你的例子也会指出问题的无意义,所以,是的,为什么不呢?我不是来评判问题的(但如果你是:使用评论和投票),我来这里是为了帮助大家。我们一开始什么都不知道,只是试着看看什么有效,什么无效。调用sleep()
有效,但在某些情况下是非常糟糕的做法(阻塞主线程)我不希望看到OP在几个星期内出现一个阻塞的主线程问题,特别是如果有合理的选择。有趣的是,代码>睡眠(5)< /C>是最短的“解决方案”,所以OP甚至可以考虑使用它,也因为GCD代码看起来对新手来说是可怕的。
sleep(5);
[self myMethodToCallAfter5Seconds];