我需要在(相同)函数的两行执行之间增加延迟。有什么有利的选择吗?
注意:我不需要两个不同的函数来执行此操作,并且延迟一定不会影响其他函数的执行。
例如:
line 1: [executing first operation];
line 2: Delay /* I need to introduce delay here */
line 3: [executing second operation];
任何帮助都是可取的。预先感谢...
您可以使用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");
});
您仍然应该问自己“我真的需要增加延迟吗?”,因为它通常会使代码复杂化并导致争用情况。
您可以使用NSThread
方法:
[NSThread sleepForTimeInterval: delay];
但是,如果您在主线程上执行此操作,则会阻止该应用程序,因此仅在后台线程上执行此操作。
或Swift
NSThread.sleepForTimeInterval(delay)
在Swift 3中>]
Thread.sleep(forTimeInterval: delay)
此行在3秒钟后调用选择器secondMethod:
我有几个基于回合的游戏,我需要AI暂停后才能转弯(在转弯之间移动)。我确信还有其他更有用的情况,延迟是最好的解决方案。在Swift中:
如果您的目标是iOS 4.0+,则可以执行以下操作:
[就像@Sunkas写道,performSelector:withObject:afterDelay:
是dispatch_after
的项坠,只是它较短并且您具有常规的objective-c
语法。如果需要将参数传递到要延迟的块,则可以通过参数withObject
传递参数,然后将在调用的selector
中接收它:
当今最方便的方式:Xcode提供了一个代码片段来执行此操作,您只需输入延迟值以及希望在延迟后运行的代码。