GCD延时执行(dispatch_after)

本文深入探讨了GCD(Grand Central Dispatch)中的延迟执行方法,包括dispatch_after和dispatch_after_f两个核心函数的使用及示例。dispatch_after允许开发者指定延迟时间后在特定队列上执行代码块,而dispatch_after_f则提供了带参数的延迟执行功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇我们讲了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]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值