使用XML或JSON解析器在iOS应用程序中解析数据

时间:2012-07-04 00:00:47

标签: ios xml json web-services nsurlconnection

我只是想澄清一下我对iOS应用程序中消耗的Web服务的理解。

因此,NSURLConnection用于从iOS应用程序调用Web方法并获取Web方法返回的数据。收到数据后,我们可以使用XMLParser或JSON解析器来解析数据,具体取决于Web服务的编写内容。这是正确的吗?

1 个答案:

答案 0 :(得分:3)

只是添加其他人在评论中已经说过的内容:

理想情况下,您希望始终使用不会阻塞主线程的NSURLConnection's Delegate异步连接。如果您还没有意识到,iOS将强制退出阻止主线程的应用程序太长时间。在某些情况下,同步连接可以正常,但我会说超过90%的时间都需要异步。

也就是说,异步连接会引起一系列令人头疼的问题。如果在允许用户访问应用程序界面之前需要获取数据,则需要抛出加载屏幕然后将其删除。如果用户移动到启动新请求的应用程序的其他部分,则需要管理取消请求。在用户为应用程序提供背景的情况下,您还需要确定是否需要注册任何正在进行的请求以进行后台完成。

在JSON解析方面,总是建议尽可能使用NSData,因为从NSString转换JSON会增加NSString本身的大量开销。我个人不使用Apple提供的JSON解析器,但the excellent JSONKit因为它比Apple的二进制plist解析器更快。但是,它确实要求您的JSON严格遵守JSON RFC,并且它是UTF-8/16/32编码,而不是ASCII。这在可用的更快的JSON解析器中是相当标准的。

尽可能避免XML。内置的iPhone解析器只是一个SAX风格的解析器,实现起来很讨厌。如果必须使用XML,请查看Ray Wenderlich's XML parser comparison并选择合适的XML。如果您要解析大型XML文档,那么考虑到iDevices的处理能力有限,SAX可能是您唯一的选择。

- 编辑 -

其中一位评论者提到了SBJSON。我建议完全反对。它比Apple的JSON解析器(自iOS 5以来一直可用)慢,并且比JSONKit和其他几个解析器慢一个数量级。我特意将我当前的企业级iOS应用程序从SBJSON中移除,因为我在JSON解析中也收到了错误。