gcd的简单用法(持续更新)

简单介绍

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");
    }];

IMG_2921.JPG

你可能感兴趣的:(gcd的简单用法(持续更新))