如何在iOS中让线程休眠几秒钟?

9
在iOS环境下,是否可以让当前线程休眠几秒钟,然后执行我的代码?对我来说,NSTimer、GDC或任何技术都可以。

1
你尝试了什么?请分享你已经尝试过的代码。另外,你有尝试过像 sleep(2);[NSThread sleepForTimeInterval:2000] 这样简单的东西吗? - Popeye
你想要实现什么目标? - Lorenzo B
@flexaddicted 我并不认为这是那个问题的直接副本。根据Opart Code使用的标签,他似乎没有涉及到Java。他可能根本不了解Java,并且不会考虑用这种方式搜索相关信息。但当然,这是一个重复的问题,在SO上有许多类似的问题... - Michal
1
@Michal 我同意你的观点。不管怎样,只要简单搜索一下就会得到很多关于这个主题的结果。 - Lorenzo B
1
感谢所有的回复。我从Popeye发布的帖子中学到了更多。 - Opart Code
5个回答

27

如果你分享一下你所做的事情,会更好。但是既然你要求了,在这里就给你。

以下是几个选项:

选项1

// Standard Unix calls
sleep(); 
usleep();

有关 sleep 函数的一些文档可以在这里找到。你会发现它们实际上是C函数,但由于Objective-C是C的严格超集,因此我们仍然可以使用sleepusleep函数。

选项2

[NSThread sleepForTimeInterval:2.000];//2 seconds

这个方法的苹果文档说明:

使线程休眠一段给定的时间间隔。

讨论

当线程被阻塞时,不会发生任何运行循环处理。

选项3

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 
                              1 * NSEC_PER_SEC),
                dispatch_get_main_queue(),
                ^{ 
                     // Do whatever you want here. 
                 });

Grand Central Dispatch 是另一种相当不错的方法。这里是苹果对 Grand Central Dispatch 的文档,非常值得一读。

还有一个问题可能会很有用: 如何在 Objective-C 中等待


1
我认为dispatch_after方法是我想要的。谢谢。 - Opart Code
选项2会停止系统。 - Itai Spector
在SO上是否有“发布您的代码”的要求? - NSTJ
@NSTJ,我对你的问题感到困惑。你是在谈论原帖中分享代码的问题吗?如果是的话,建议参考 https://stackoverflow.com/help/how-to-ask 来改进问题,以便找到最适合他们的解决方案,并且还有许多其他原因可以证明分享代码会更好,包括展示他们已经尝试过自己解决问题等。 - Popeye
确实 - 看起来 OP 可能还没有做任何事情(这很好),我看不出有什么问题,他可以像他那样提出一个良好结构的问题而不发布任何代码。此外,从您给出的链接中可以看到:> 不是所有问题都受益于包含代码。 - NSTJ
[NSThread sleepForTimeInterval:2000]; 这将会休眠2000秒。我正在编辑,因为大多数人会认为这是2000毫秒,并且会对行为感到困惑(如上面评论中的@Itai Spector已经看到)。 - Albert Renshaw

8

这真的再简单不过了。

sleep(seconds);

谢谢您的评论,看起来这是一个系统级API来停止当前线程。无论如何,它对我的情况有效。 - Opart Code
1
为什么不呢?如果答案真的很简单,我不知道...你期望什么呢? - Earl Grey

5
使用类方法+ (void)sleepForTimeInterval:(NSTimeInterval)ti
变量NSTimeInterval是双精度类型,表示休眠的秒数。
// Block for .5 seconds
[NSThread sleepForTimeInterval:.5];

3

无论是

[self performSelector:@selector(YourFunctionName) withObject:(can be Self or Object from other Classes) afterDelay:(Time Of Delay)];`

或者

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), 
    dispatch_get_main_queue(), ^{
    //your method 
});

1
这取决于你如何创建(生成)线程。例如,如果你使用NSThread类来创建你的线程,你可以使用两个类方法:
sleepUntilDate:
sleepForTimeInterval:

通常情况下,自己处理线程管理是一个不好的想法,因为多线程编程非常困难。你可以使用 GCD 或操作队列来处理应用程序中的多线程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接