分派源提供了高效的方式來處理事件侈玄,這種方式是通過發(fā)送通知,接受通知的方式實現; 但有的時候系統(tǒng)發(fā)送通知有延遲:已經處理完多次事件才進行通知,這時候會把事件源合并成一個事件傳遞過來饥伊,不會丟失象浑; 分派源在性能至關重要的場合會用到,但是一般都不會被用到琅豆;
/**
* DISPATCH_SOURCE_TYPE_DATA_ADD 方式可以累積傳遞過來的值
* 在同一時間只能有一個事件源被分配
* 傳遞過來的事件源可以用 dispatch_source_get_data 來獲取愉豺,獲取到的value值是通過 dispatch_source_merge_data 發(fā)送的;
* 我們用 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 的值
* 傳遞的值可以是已經下載的字節(jié)數蚪拦,可以是下載后的百分比 ,可以是已經存入數據庫的條目數
*/
dispatch_source_merge_data(source, 1);
[NSThread sleepForTimeInterval:0.1];
}
});
- 下面是輸出結果,每隔1s鐘會輸出一個結果
-----2
-----2
-----2
-----2
-----2
-----2
-----2
-----2
-----2
-----2