上一篇我们讲了GCD的定时器GCD定时器(GCD Timer)
这一篇我们来说说GCD的延迟执行.
在NSTimer里面我们有几个NSObject的分类方法执行延时方法.一般把这些方法称之为线程间的"交互".戳NSThread详解
在GCD里面的延迟.有两个方法:
// dispatch_after(<#dispatch_time_t when#>, <#dispatch_queue_t _Nonnull queue#>, <#^(void)block#>)
// dispatch_after_f(<#dispatch_time_t when#>, <#dispatch_queue_t _Nonnull queue#>, <#void * _Nullable context#>, <#dispatch_function_t _Nonnull work#>)
Xcode10下有个快速方法
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// <#code to be executed after a specified delay#>
// });
dispatch_after()
/**
创建GCD延迟执行方法
@param when 延迟多久后开始执行block
@param queue block在哪个线程上执行
@param block 延迟后执行的代码块
@return 无返回值
*/
dispatch_after(<#dispatch_time_t when#>, <#dispatch_queue_t _Nonnull queue#>, <#^(void)block#>)
使用样例:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 2), dispatch_get_main_queue(), ^{
NSLog(@"%@", [NSThread currentThread]);
});
dispatch_after_f()
/**
创建gcd延迟执行带参数的方法
@param when 延迟多久后开始执行block
@param queue block在哪个线程上执行
@param context 所带的参数
@param work 延迟后执行的函数
@return 无返回值
*/
dispatch_after_f(<#dispatch_time_t when#>, <#dispatch_queue_t _Nonnull queue#>, <#void * _Nullable context#>, <#dispatch_function_t _Nonnull work#>)
使用样例:
NSArray *array = @[@1 ,@2 ,@3];
dispatch_after_f(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 2), dispatch_get_main_queue(), (__bridge_retained void*)array, dispatchAfterFunction);
// MARK: 延时执行函数
void dispatchAfterFunction(void *_Nullable params) {
NSLog(@"%@", [NSThread currentThread]);
}