dispatch_source_merge_data事件联结

@property (nonatomic, strong) dispatch_source_t refreshListSource;
//缓冲刷新
if (!self.refreshListSource) {
    self.refreshListSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_DATA_ADD, 0, 0, dispatch_get_main_queue());
    dispatch_source_set_event_handler(_refreshListSource, ^{
        NSLog(@"1");
    });
}
dispatch_resume(self.refreshListSource);

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    for (int i = 0; i < 10; i++) {
    [NSThread sleepForTimeInterval:1];
    dispatch_source_merge_data(_refreshListSource, 1);
     }
}

结果:10秒后只打印一次1
DISPATCH_SOURCE_TYPE_DATA_ADD
当同一时间,一个事件的的触发频率很高,那么Dispatch Source会将这些响应以ADD的方式进行累积,然后等系统空闲时最终处理,如果触发频率比较零散,那么Dispatch Source会将这些事件分别响应。


应用:
1、更新进度条UI
2、在项目中,我用了联结刷新来降低聊天界面密集收到消息的刷新table压力,效果还不错

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容