Objective-C:NSURLConnection,何时开始处理响应?

时间:2011-05-03 00:28:17

标签: iphone objective-c nsurlconnection

使用NSURLConnection时,有几种方法值得关注......我知道在连接过程中可能会多次触发connection:didReceiveResponse:

在什么时候开始使用收到的信息是安全的?在connectionDidFinishLoading:内?

在我的项目中,我通过设置在connection:didReceiveData:中附加收到的数据: // append the data [receivedData appendData:data];

然后我实际上在connectionDidFinishLoading:中使用TouchJSON创建我的NSDictionary,循环访问数据并更改我的UI。

我是否正确地做到了?

2 个答案:

答案 0 :(得分:3)

connectionDidFinishLoading是开始处理收到的数据的正确位置。

didReceiveData是附加新收到的数据的正确位置(不是didReceiveResponse)。

didReceiveResponse是检查HTTP状态代码等的好地方。

答案 1 :(得分:1)

您真的需要为正在执行的任务进行异步连接吗?如果你在connection:didReceiveResponse:中所做的只是将数据附加到缓冲区,那么你真的没有通过使用异步请求获得任何东西。

为什么不分离使用sendSynchronousRequest:returningResponse:error:的线程呢?然后你的线程可以在有数据时(或者当它有错误时)调用回调,并且不必担心什么时候开始使用响应是安全的。

另一方面,如果您有一个流式JSON解析器可以在下载时解析数据,那么使用异步请求并将数据提供给解析器是有意义的。这将需要更少的内存,因为您不需要缓冲整个响应,并且在运行时看起来更快,因为在下载数据时正在进行一些解析。在这种情况下,您可以使用connection:didReceiveResponse:将数据提供给解析器,而不是将其附加到缓冲区,然后connectionDidFinishLoading:告诉解析器没有更多数据可供解析。< / p>