设为首页 加入收藏

TOP

使用dispatch_group实现并封装分组并发网络请求(二)
2017-10-13 10:29:20 】 浏览:531
Tags:使用 dispatch_group 实现 封装 分组 并发 网络 请求
sociatedObject(group, &groupErrorKey); [arrayM addObject:error]; failure(error); dispatch_group_leave(group); }]; } - (void)sendGroupPostRequest:(BlockAction)requests success:(BlockAction)success failure:(GroupResponseFailure)failure { if (requests == nil) { return; } dispatch_group_t group = dispatch_group_create(); objc_setAssociatedObject(group, &groupErrorKey, [NSMutableArray array], OBJC_ASSOCIATION_RETAIN_NONATOMIC); Method originalPost = class_getInstanceMethod(self.class, @selector(sendPOSTRequest:withData:paramForm:withTimeout:showAlert:success:failure:)); Method groupPost = class_getInstanceMethod(self.class, @selector(sendPOSTRequestInGroup:withData:paramForm:withTimeout:showAlert:success:failure:)); NSOperationQueue *queue = [[NSOperationQueue alloc] init]; objc_setAssociatedObject(queue, &queueGroupKey, group, OBJC_ASSOCIATION_RETAIN_NONATOMIC); queue.qualityOfService = NSQualityOfServiceUserInitiated; queue.maxConcurrentOperationCount = 3; [queue addOperationWithBlock:^{ method_exchangeImplementations(originalPost, groupPost); requests(); // 发出请求后就可以替换回original method,不必等待回调,尽量减小替换的时间窗口 method_exchangeImplementations(originalPost, groupPost); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ NSMutableArray *arrayM = objc_getAssociatedObject(group, &groupErrorKey); if (arrayM.count > 0) { if (failure) { failure(arrayM.copy); } } else if(success) { success(); } }); }]; }

 

- (void)sendPOSTRequestInGroup:(NSString *)strURL withData:(NSDictionary *)data paramForm:(ParamForm)paramForm withTimeout:(NSTimeInterval)timeout showAlert:(BOOL)show success:(BlockResponse)success failure:(BlockResponseFailure)failure
替换网络工具层的底层post请求

sendPOSTRequest:withData:paramForm:withTimeout:showAlert:success:failure:

这样在 

- (void)sendGroupPostRequest:(BlockAction)requests success:(BlockAction)success failure:(GroupResponseFailure)failure
requests block中,把网络请求扔进去,单个请求本身的success和failure都能执行,success执行组成功的代码,failure中可以拿到每个请求的error,作相应处理。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【原】iOS学习之SQLite和CoreData.. 下一篇iOS - UITableView中Cell重用机制..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目