1、自定义串行队列
// 串行队列 SERIAL
dispatch_queue_t queue = dispatch_queue_create("SERIAL", DISPATCH_QUEUE_SERIAL);
// 防止循环引用 使用 __weak 修饰
__weak typeof(self)weakSelf = self;
// 异步任务 分线程中执行 不会阻塞主线程
dispatch_async(queue, ^{
[weakSelf eat];
});
// 同步任务 主线程中执行 会阻塞当前线程
dispatch_sync(queue, ^{
[weakSelf eat];
});
2、自定义并行队列
// 并行队列 CONCURRENT
dispatch_queue_t queue2 = dispatch_queue_create("CONCURRENT", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue2, ^{
[weakSelf eat];
});
dispatch_sync(queue2, ^{
[weakSelf eat];
});
3、获取系统的4个并行队列
dispatch_queue_t queue4 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue4, ^{
[weakSelf eat];
});
4、子线程中执行完之后,回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
// 更新UI
});
5、所有任务执行完成后回调(执行任务为同步请求)
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,queue2,^{执行任务A});
dispatch_group_async(group,queue2,^{执行任务B});
dispatch_group_async(group,queue2,^{执行任务C});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"queue2的所有任务都执行完了");
});
6、网络异步请求--(利用group)所有任务执行完成后回调
@property (nonatomic, strong, nullable) dispatch_group_t serviceGroup;
[SVProgressHUD showModalLoading];
self.serviceGroup = dispatch_group_create();
[self loadData];//加载数据
dispatch_group_notify(self.serviceGroup, dispatch_get_main_queue(), ^{
[SVProgressHUD dismissModalLoadingView];
});
- (void)loadData {
WS(weakSelf);
dispatch_group_enter(self.serviceGroup);
NSMutableDictionary *parameter = [NSMutableDictionary dictionary];
parameter[@""] = @"";
[[NetWorkingManager shareManager] GET:@"" parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
dispatch_group_leave(weakSelf.serviceGroup);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
7、网络异步请求--(利用信号量)按顺序执行
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self loadDataWithSemaphore:semaphore];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[self loadDataWithSemaphore:semaphore];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[self loadData3];
});
- (void)loadDataWithSemaphore:(dispatch_semaphore_t)semaphore {
WS(weakSelf);
NSMutableDictionary *parameter = [NSMutableDictionary dictionary];
parameter[@""] = @"";
[[NetWorkingManager shareManager] GET:@"" parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
dispatch_semaphore_signal(semaphore);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
网友评论