使用NSURLConnection时,有几种方法值得关注......我知道在连接过程中可能会多次触发connection:didReceiveResponse:
。
在什么时候开始使用收到的信息是安全的?在connectionDidFinishLoading:
内?
在我的项目中,我通过设置在connection:didReceiveData:
中附加收到的数据:
// append the data
[receivedData appendData:data];
然后我实际上在connectionDidFinishLoading:
中使用TouchJSON创建我的NSDictionary,循环访问数据并更改我的UI。
我是否正确地做到了?
答案 0 :(得分:3)
connectionDidFinishLoading
是开始处理收到的数据的正确位置。
didReceiveData
是附加新收到的数据的正确位置(不是didReceiveResponse
)。
didReceiveResponse
是检查HTTP状态代码等的好地方。
答案 1 :(得分:1)
您真的需要为正在执行的任务进行异步连接吗?如果你在connection:didReceiveResponse:
中所做的只是将数据附加到缓冲区,那么你真的没有通过使用异步请求获得任何东西。
为什么不分离使用sendSynchronousRequest:returningResponse:error:
的线程呢?然后你的线程可以在有数据时(或者当它有错误时)调用回调,并且不必担心什么时候开始使用响应是安全的。
另一方面,如果您有一个流式JSON解析器可以在下载时解析数据,那么使用异步请求并将数据提供给解析器是有意义的。这将需要更少的内存,因为您不需要缓冲整个响应,并且在运行时看起来更快,因为在下载数据时正在进行一些解析。在这种情况下,您可以使用connection:didReceiveResponse:
将数据提供给解析器,而不是将其附加到缓冲区,然后connectionDidFinishLoading:
告诉解析器没有更多数据可供解析。< / p>