我正在开发基于网络的iOS应用程序,用于从服务器下载JSON数据并对其进行处理。下载任务和处理任务都需要很长时间才能完成,所以我不想在主线程中执行任何操作。在后台执行网络和其他耗时任务
我认为有2种方式来做到这一点:
使用
NSURLConnection
执行异步加载,并在didFinishLoading
方法使用GCD(说)做加工的背景。使用GCD的
dispatch_async
(比方说)在后台开始工作,并使用NSURLConnection's
sendSynchronousRequest:returningResponse:error
同步下载的数据,进行数据处理,并调用UI
更新在主线程上。
我认为第二个方法是更容易编写和将产生更干净的代码,特别是当一个“下载/处理”任务涉及多个连续的服务调用的数据下载。因此,而不是执行会喜欢:
主(开始) - >背景(下载) - >主(NSURLConnectionDelegate
方法) - >背景(数据处理) - >主(UI
更新)
,我们将有:
主要(开始) - >背景(下载) - >背景(数据处理) - >主要(UI更新) 这似乎是更清洁的我。
我发现2个类似的问题:Good pattern for Internet requests with Grand Central Dispatch? 而
NSURLConnection and grand central dispatch
而且答案似乎都使用概念上类似于方法1
一些建议是否有达到什么没有描述有道在方法2中?
在此先感谢!
看看[AFNetworking](https://github.com/AFNetworking/AFNetworking)。 – 2013-03-07 04:50:05
@MikeD,AFNetworking可以另外在这里执行的是在后台执行JSON解析,不是吗?如果我需要对解析的JSON对象执行昂贵的处理,该怎么办?我认为我正在寻找的是一个设计模式比框架更多:) – wingman123 2013-03-07 05:04:58
我总是使用第二种方法,但第一种方法的优势之一是在iOS 6之前,如果您想要超过240秒的超时请求,它可能取消异步连接。 – prasad 2013-03-07 05:32:12