简单介绍
1、gcd相关简单用法;内容简单,牛绕行!
2、方法直出,不涉及过多理论东西;如需理论,自行百度;
3、文章持续更新相关内容,建议点赞收藏;
.h
/*
简单的异步线程
dispatch_get_global_queue 系统默认的全局队列
DISPATCH_QUEUE_PRIORITY_DEFAULT默认级别
flag 0 保留参数
*/
+ (void)async:(void(^)(void))block;
/*
主线程 如果使用dispatch_sync将造成死锁
dispatch_get_main_queue 系统默认的主线程队列
除此之外,还有自定义队列
*/
+ (void)main:(void(^)(void))block;
/*
延迟后执行
执行后回到主线程
*/
+ (void)delay:(void(^)(void))block;
/*
延迟后执行
执行后回到主线程
*/
+ (void)delay:(NSInteger)time block:(void(^)(void))block;
备注
1、这里提供一个define,方便使用
#define gcd DKGCD
.m
关于方法的备注,在m中不再做相关注释。
+ (void)async:(void(^)(void))block {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if (block) {
block();
}
});
}
+ (void)main:(void(^)(void))block {
dispatch_async(dispatch_get_main_queue(), ^{
if (block) {
block();
}
});
}
+ (void)delay:(void(^)(void))block {
[gcd delay:0 block:block];
}
+ (void)delay:(NSInteger)time block:(void(^)(void))block {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[gcd main:^{
if (block) {
block();
}
}];
});
}
一般使用方法
1、需要注意block的使用,防止内存无法使用问题;
__weak TestViewController *weakSelf = self;
[gcd delay:3 block:^{
if (!weakSelf) {
NSLog(@"主体不存在");
return;
}
NSLog(@"delay");
}];