我已经阅读了很多文档,我发现我应该使用GCD和调度组:
>使用dispatch_group_create()创建一个组
>对于每个请求:
>使用dispatch_group_enter()输入调度组
>运行请求
>收到回复时,请使用dispatch_group_leave()离开该组
>等待dispatch_group_wait()
>使用dispatch_release()释放组
然而,我不确定这种做法是否会有一些陷阱 – 还是有更好的方法等待并行请求完成?
以下代码看起来效果很好:
// Just send a request and call the when finished closure func sendRequest(url: String,whenFinished: () -> VoID) { let request = NSMutableURLRequest(URL: NSURL(string: url)) let task = NSURLSession.sharedSession().dataTaskWithRequest(request,completionHandler: { (data,response,error) -> VoID in whenFinished() }) task.resume() } let urls = ["http://example.com?a","http://example.com?b","http://example.com?c","http://example.com?d","http://invalID.example.com"] var fulfilledUrls: Array<String> = [] let group = dispatch_group_create(); for url in urls { dispatch_group_enter(group) sendRequest(url,{ () in fulfilledUrls.append(url) dispatch_group_leave(group) }) } dispatch_group_wait(group,disPATCH_TIME_FOREVER); for url in fulfilledUrls { println(url) }解决方法 是的,这是基本的想法,尽管你理想情况下使用dispatch_group_notify而不是dispatch_group_wait,因为dispatch_group_wait会阻塞调用线程直到组完成,而dispatch_group_notify将在组完成时调用一个块而不会在过渡期间阻塞调用线程. 总结
以上是内存溢出为你收集整理的如何知道iOS中何时满足并行HTTP请求?全部内容,希望文章能够帮你解决如何知道iOS中何时满足并行HTTP请求?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)