美文网首页
GCD干货,当N个方法执行完成后,在执行一个统计方法

GCD干货,当N个方法执行完成后,在执行一个统计方法

作者: Yo_Moon | 来源:发表于2020-03-17 13:53 被阅读0次

GCD 上干货 >>>>
不喜欢废话


/// GCD - 异步主线程
/// @param block 回调
NS_INLINE void mo_dispatch_async_main(dispatch_block_t block) {
    dispatch_async(dispatch_get_main_queue(), block);
}

/// GCD - 异步线程
/// @param block 回调
NS_INLINE void mo_dispatch_async(dispatch_block_t block) {
    dispatch_async(dispatch_get_global_queue(0, 0), block);
}

/// GCD - 同步线程
/// @param block 回调
NS_INLINE void mo_dispatch_sync(dispatch_block_t block) {
    dispatch_async(dispatch_get_global_queue(0, 0), block);
}

/// GCD - 异步列队
/// @param group 列队
/// @param block 回调
NS_INLINE void mo_dispatch_group_async(dispatch_group_t group, dispatch_block_t block) {
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), block);
}

/// GCD - 异步列队通知
/// @param group 列队
/// @param block 回调
NS_INLINE void mo_dispatch_group_notify(dispatch_group_t group, dispatch_block_t block) {
    dispatch_group_notify(group, dispatch_get_main_queue(), block);
}

/// GCD - 迟延执行
/// @param time 迟延时间,单位:秒
/// @param block 回调
NS_INLINE void mo_dispatch_after(int64_t time, dispatch_block_t block) {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), block);
}

重点说下异步列队:
需求: 当N个方法执行完成后,在执行一个统计方法;
注意: 列队和通知的'group'必须是一个指针变量,否则通知比列队结果先执行.

下边干货⬇️


    NSLog(@"主线程: %@",[NSThread currentThread]);

    NSLog(@"上边的代码");
    
    __block int i = 0;
    
    dispatch_group_t group = dispatch_group_create();
    
    NSLog(@"异步1: %d", i);
    mo_dispatch_group_async(group, ^{
        [NSThread sleepForTimeInterval:7];
        NSLog(@"结束1: %@",[NSThread currentThread]);
        i += 7;
    });
    
    NSLog(@"异步2: %d", i);
    mo_dispatch_group_async(group, ^{
        [NSThread sleepForTimeInterval:2];
        NSLog(@"结束2: %@",[NSThread currentThread]);
        i += 2;
    });
    
    NSLog(@"异步3: %d", i);
    mo_dispatch_group_async(group, ^{
        [NSThread sleepForTimeInterval:5];
        NSLog(@"结束3: %@",[NSThread currentThread]);
        i += 5;
    });
    
    mo_dispatch_group_notify(group, ^{
        NSLog(@"统计 >>> : %d", i);
    });
    
    NSLog(@"下边的代码: %d", i);

log:

2020-03-17 13:48:30.694475+0800 DomeOC[3404:117078] 主线程: <NSThread: 0x600000f1c5c0>{number = 1, name = main}
2020-03-17 13:48:30.694590+0800 DomeOC[3404:117078] 上边的代码
2020-03-17 13:48:30.694682+0800 DomeOC[3404:117078] 异步1: 0
2020-03-17 13:48:30.694824+0800 DomeOC[3404:117078] 异步2: 0
2020-03-17 13:48:30.694941+0800 DomeOC[3404:117078] 异步3: 0
2020-03-17 13:48:30.695048+0800 DomeOC[3404:117078] 下边的代码: 0
2020-03-17 13:48:32.695903+0800 DomeOC[3404:117151] 结束2: <NSThread: 0x600000f4f240>{number = 4, name = (null)}
2020-03-17 13:48:35.696959+0800 DomeOC[3404:117149] 结束3: <NSThread: 0x600000f7b540>{number = 7, name = (null)}
2020-03-17 13:48:37.698527+0800 DomeOC[3404:117155] 结束1: <NSThread: 0x600000f44bc0>{number = 5, name = (null)}
2020-03-17 13:48:37.698971+0800 DomeOC[3404:117078] 统计 >>> : 14

相关文章

  • GCD干货,当N个方法执行完成后,在执行一个统计方法

    GCD 上干货 >>>>不喜欢废话 重点说下异步列队:需求: 当N个方法执行完成后,在执行一个统计方法;注意: 列...

  • iOS开发之三种定时执行任务

    在iOS开发中,下面介绍三种方法执行定时任务。 方法一:performSelector 方法二:GCD 方法三:N...

  • iOS延迟代码执行的方法

    延迟执行的方法 使用定时器方法延迟执行 使用GCD方法延迟,优点是可以在子线程执行 不受RunLoopMode模式...

  • 大O标识法和时间复杂度

    度量一个程序的执行时间通常有两种方法事后统计的方法事前分析估算的方法 OΟ(1)<Ο(log n)<Ο(n)<Ο(...

  • GCD

    1,GCD 栅栏方法:dispatch_barrier_async 2,GCD 延时执行方法:dispatch_a...

  • Promise、await链式调用

    需求是:在方法一执行完成后再执行getchartAlarmNumber(),避免因为网络卡顿造成逻辑错误 方法一:...

  • GCD其它常用函数(四)

    一. 延迟执行 iOS常见的延时执行调用NSObject的方法 使用GCD函数(延迟并控制方法在哪个线程执行) 使...

  • GCD的学习笔记(One)

    并行和并发 GCD简介 GCD的任务 GCD的队列 GCD创建队列或获取队列的方法 任务的执行方式:同步执行(同步...

  • iOS技术杂记

    GCD 5个不同队列 将一个函数在主线程执行的4种方法 GCD方法,通过向主线程队列发送一个block块,使blo...

  • java学习之变量

    变量: 1.局部变量 声明在方法、构造方法或者语句块中 在方法、构造方法或者语句块执行时被创建,执行完成后被销毁 ...

网友评论

      本文标题:GCD干货,当N个方法执行完成后,在执行一个统计方法

      本文链接:https://www.haomeiwen.com/subject/ukktyhtx.html