gcd的簡單用法(持續(xù)更新)

簡單介紹

1、gcd相關(guān)簡單用法;內(nèi)容簡單,牛繞行!

2、方法直出,不涉及過多理論東西;如需理論,自行百度;

3、文章持續(xù)更新相關(guān)內(nèi)容,建議點(diǎn)贊收藏;

.h

/*
簡單的異步線程
dispatch_get_global_queue 系統(tǒng)默認(rèn)的全局隊(duì)列
DISPATCH_QUEUE_PRIORITY_DEFAULT默認(rèn)級別
flag 0 保留參數(shù)
*/

+ (void)async:(void(^)(void))block;

/*
主線程 如果使用dispatch_sync將造成死鎖
dispatch_get_main_queue 系統(tǒng)默認(rèn)的主線程隊(duì)列
除此之外,還有自定義隊(duì)列
*/

+ (void)main:(void(^)(void))block;

/*
延遲后執(zhí)行
執(zhí)行后回到主線程
*/

+ (void)delay:(void(^)(void))block;

/*
延遲后執(zhí)行
執(zhí)行后回到主線程
*/

+ (void)delay:(NSInteger)time block:(void(^)(void))block;

備注

1、這里提供一個(gè)define,方便使用

#define gcd DKGCD

.m

關(guān)于方法的備注,在m中不再做相關(guān)注釋。

+ (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的使用,防止內(nèi)存無法使用問題;

    __weak TestViewController *weakSelf = self;
    [gcd delay:3 block:^{
        if (!weakSelf) {
            NSLog(@"主體不存在");
            return;
        }
        NSLog(@"delay");
    }];

IMG_2921.JPG
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容