在后面两行的执行之间增加延迟

问题描述 投票:69回答:7

我需要在(相同)函数的两行执行之间增加延迟。有什么有利的选择吗?

注意:我不需要两个不同的函数来执行此操作,并且延迟一定不会影响其他函数的执行。

例如:

line 1: [executing first operation];

line 2: Delay                        /* I need to introduce delay here */

line 3: [executing second operation];

任何帮助都是可取的。预先感谢...

objective-c delay execution
7个回答
194
投票

您可以使用gcd来执行此操作,而无需创建其他方法

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
  NSLog(@"Do some work");
});

您仍然应该问自己“我真的需要增加延迟吗?”,因为它通常会使代码复杂化并导致争用情况。


26
投票

您可以使用NSThread方法:

[NSThread sleepForTimeInterval: delay];

但是,如果您在主线程上执行此操作,则会阻止该应用程序,因此仅在后台线程上执行此操作。


或Swift

NSThread.sleepForTimeInterval(delay)

在Swift 3中>]

Thread.sleep(forTimeInterval: delay)

20
投票

此行在3秒钟后调用选择器secondMethod:


8
投票

我有几个基于回合的游戏,我需要AI暂停后才能转弯(在转弯之间移动)。我确信还有其他更有用的情况,延迟是最好的解决方案。在Swift中:


4
投票

如果您的目标是iOS 4.0+,则可以执行以下操作:


1
投票

[就像@Sunkas写道,performSelector:withObject:afterDelay:dispatch_after的项坠,只是它较短并且您具有常规的objective-c语法。如果需要将参数传递到要延迟的块,则可以通过参数withObject传递参数,然后将在调用的selector中接收它:


0
投票

当今最方便的方式:Xcode提供了一个代码片段来执行此操作,您只需输入延迟值以及希望在延迟后运行的代码。

© www.soinside.com 2019 - 2024. All rights reserved.