GCD延时执行(dispatch_after)

上一篇我们讲了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]);
}

你可能感兴趣的:(多线程)