1、組:dispatch_group
多個(gè)網(wǎng)絡(luò)請(qǐng)求執(zhí)行完,再執(zhí)行刷新
dispatch_group_t group = dispatch_group_create();
NSLog(@"開始執(zhí)行");
dispatch_group_enter(group);
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"網(wǎng)絡(luò)請(qǐng)求1");
dispatch_group_leave(group);
}) ;
dispatch_group_enter(group);
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"網(wǎng)絡(luò)請(qǐng)求2");
dispatch_group_leave(group);
}) ;
dispatch_group_enter(group);
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"網(wǎng)絡(luò)請(qǐng)求3");
dispatch_group_leave(group);
}) ;
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"刷新界面");
});
dispatch_group_wait(group, DISPATCH_TIME_FOREVER) ;
NSLog(@"等我一下");
以上代碼運(yùn)行打?。?/p>
開始執(zhí)行
網(wǎng)絡(luò)請(qǐng)求1
網(wǎng)絡(luò)請(qǐng)求2
網(wǎng)絡(luò)請(qǐng)求3
等我一下
刷新界面
2、dispatch_once 通常在創(chuàng)建單例時(shí)使用
3、dispatch_after 延遲執(zhí)行
4、dispatch_barrier_async 柵欄函數(shù)
分割異步任務(wù)
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (int i = 0; i< 3; i++) {
NSLog(@"任務(wù)1");
}
}) ;
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (int i = 0; i< 3; i++) {
NSLog(@"任務(wù)2");
}
}) ;
dispatch_barrier_async(dyConcurrent, ^{
NSLog(@"攔一下");
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (int i = 0; i< 3; i++) {
NSLog(@"任務(wù)3");
}
}) ;
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (int i = 0; i< 3; i++) {
NSLog(@"任務(wù)4");
}
}) ;
打印結(jié)果:121212攔一下343434
5、dispatch_apply 快速遍歷
6、信號(hào)量 dispatch_semaphore
可控制最大并發(fā)
dispatch_semaphore_t cacheSemphore = dispatch_semaphore_create(5);
for (int i = 0; i< 10; i++) {
dispatch_async(dispatch_queue_create("dyConcurrent1", DISPATCH_QUEUE_CONCURRENT), {
dispatch_semaphore_wait(cacheSemphore , DISPATCH_TIME_FOREVER);
NSLog(@"任務(wù)%ld",(long)i);
sleep(1);
NSLog(@"到我了");
dispatch_semaphore_signal(cacheSemphore);
});
}
打印結(jié)果:
任務(wù)0
任務(wù)1
任務(wù)2
任務(wù)3
任務(wù)4
到我了
到我了
到我了
到我了
到我了
任務(wù)5
任務(wù)6
任務(wù)7
任務(wù)8
任務(wù)9
到我了
到我了
到我了
到我了
到我了