GCD-分派源

分派源提供了高效的方式来处理事件,这种方式是通过发送通知,接受通知的方式实现; 但有的时候系统发送通知有延迟:已经处理完多次事件才进行通知,这时候会把事件源合并成一个事件传递过来,不会丢失; 分派源在性能至关重要的场合会用到,但是一般都不会被用到;

/**
     * DISPATCH_SOURCE_TYPE_DATA_ADD 方式可以累积传递过来的值
     * 在同一时间只能有一个事件源被分配
     * 传递过来的事件源可以用 dispatch_source_get_data 来获取,获取到的value值是通过 dispatch_source_merge_data 发送的;
     * 我们用 totalSourceCount 来累积传递过来的数据源总数
     */
    dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_DATA_ADD, 0, 0, dispatch_get_main_queue());
    
    __block long totalSourceCount = 0;
    dispatch_source_set_event_handler(source, ^{
        long value = dispatch_source_get_data(source);
        NSLog(@"-----%ld",value);
        totalSourceCount += value;
    });
    dispatch_resume(source);
    
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       
        
        for (int i =0;i<10; i++) {
            /** 
             * dispatch_source_merge_data 在任何线程中都可以使用,必须传递 >0 的值
             * 传递的值可以是已经下载的字节数,可以是下载后的百分比 ,可以是已经存入数据库的条目数
             */
            dispatch_source_merge_data(source, 1);
            [NSThread sleepForTimeInterval:0.1];
        }
    });
  • 下面是输出结果,每隔1s钟会输出一个结果
    -----2
    -----2
    -----2
    -----2
    -----2
    -----2
    -----2
    -----2
    -----2
    -----2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,248评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,296评论 6 13
  • 由于文章长度限制,本文作为[译]线程编程指南(一)后续部分。 Run Loops Run loop是与线程相关的基...
    巧巧的二表哥阅读 1,232评论 0 5
  • 本文首发CSDN,如需转载请与CSDN联系。 记得第一次读这个文档还是3年前,那时也只是泛读。如今关于iOS多线程...
    DevTalking阅读 417评论 0 2
  • 窗外飘着雪,视野所能及处,银装素裹,空灵淡静,出宿舍自教室,或深或浅的脚印落在雪地里,随路延伸,回头望着来路,有那...
    雪高老师阅读 266评论 2 5