繁体   English   中英

Objective-C:NSURLConnection,什么时候开始处理响应?

[英]Objective-C: NSURLConnection, when to starting working with the response?

使用 NSURLConnection 时,有几种方法需要观察......我知道connection:didReceiveResponse:在连接期间可能会被触发多次。

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

在我的项目中,我将接收到的数据附加到connection:didReceiveData:中,方法是: // append the data [receivedData appendData:data];

然后我实际上正在对connectionDidFinishLoading: ...使用 TouchJSON 创建我的 NSDictionary,循环遍历数据并更改我的 UI。

我做得对吗?

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

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

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

您是否真的需要异步连接来执行您正在执行的任务? 如果您在connection:didReceiveResponse:中所做的只是将数据附加到缓冲区,那么您实际上并没有通过使用异步请求获得任何收益。

为什么不直接分离使用sendSynchronousRequest:returningResponse:error:的线程呢? 然后,您的线程可以在它有数据时(或当它出错时)调用回调,并且无需担心何时可以安全地开始使用响应。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM