我正在开发一个基于网络的 iOS 应用程序,它从服务器下载 json 数据并对其进行处理。下载任务和处理任务都需要很长时间才能完成,所以我不想在主线程上执行。
我认为有两种方法可以做到这一点:
NSURLConnection
使用和在didFinishLoading
方法中使用GCD执行异步加载(比如)在后台进行处理。使用GCD
dispatch_async
(比如说)在后台开始工作并使用NSURLConnection's
sendSynchronousRequest:returningResponse:error
同步下载数据,对数据进行处理,并UI
在主线程上调用更新。
我认为第二种方法更容易编写并且会产生更清晰的代码,特别是如果一个“下载/处理数据”任务涉及多个用于数据下载的顺序服务调用。因此,与其执行如下:
主(开始)->后台(下载)->主(NSURLConnectionDelegate
方法)->后台(数据处理)->主(UI
更新)
我们会有:
main(开始)-> background(下载)-> background(数据处理)-> main(UI更新)对我来说似乎更干净。
我发现了 2 个类似的问题:Grand Central Dispatch 的 Internet 请求的良好模式?
和
NSURLConnection 和盛大的中央调度
两者的答案似乎都建议使用在概念上类似于方法 1 的东西。
是否没有适当的方法来实现方法 2 中描述的内容?
提前致谢!