@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压力,效果还不错