从URL连续获取新数据的最佳方法?

时间:2012-07-13 01:41:17

标签: objective-c ios xcode

我正在编写一个iPad应用程序,它从Web服务器上的XML文件中提取各种坐标,解析信息并在屏幕上呈现它们。

我想知道你是否有任何关于如何让它连续刷新数据的提示/建议,比如每秒(因为计算机程序每隔几秒更新一次服务器上的XML文件)。谢谢!

3 个答案:

答案 0 :(得分:2)

您肯定需要为此实现多线程后台操作,否则您的应用将完全没有响应。在我继续之前,我必须指出,不断查询服务器以获取应用程序的整个执行情况是一个坏主意,它不仅会咀嚼数据,而且必须让Wi-Fi / 3G / 4G天线保持不变,这将耗尽用户的电池快得多。

我会考虑放宽每10秒钟左右拉下数据的要求(因为服务器每隔几秒就会更新一次,你必须考虑下载和渲染当前抓取的数据的时间),甚至等待用户按下刷新按钮等。

要回答这个问题,有几种方法可以做到这一点,其中最简单的方法可能就是使用类似ASHTTPRequest的框架(虽然不再维护,但对于现代项目来说,像{{3}这样的库}})。它们处理来自服务器的异步数据下载以及许多其他有用的网络功能。

满足您要求的理想流程如下:

  1. 创建NSOperationQueue(或添加的网络库中的队列)
  2. 使用NSTimer继续创建子类NSOperation以从服务器下载(或者再次从网络库中下载相应功能)。每隔 x 秒,它就会将此请求发送到队列。
  3. 完成下载后,使用新数据更新UI(请注意,任何更改UI的功能都必须从主线程完成,因此如果您在NSOperation / etc中处理此操作,则必须使用performSelectorOnMainThread或同等的!)
  4. 希望有所帮助!如果你不想包含一个外部库,我确实有一个小的示例项目,它创建一个子类NSOperation的实例,它执行NSURLConnection,将它们发送到NSOperationQueue并同时执行它们。您可以轻松地将其修改为一次只执行1个操作,更改NSURLConnection以下载和解析服务器数据,然后更新主线程。 AFNetworking如果你有兴趣的话。

答案 1 :(得分:2)

查看NSTimer及其scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:方法

工作解决方案可能是

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:refreshData userInfo: nil repeats:YES ]

和调用对象上的方法

-(void) refreshData {
    //Do your call here
}

答案 2 :(得分:0)

在服务器上准备好新数据时,请考虑向设备发出推送通知。

这样可以节省设备电量,节省服务器负载的TON,推送通常只需要一秒钟左右即可到达,因此您的使用延迟也不错。

唯一需要注意的是,如果用户拒绝允许推送通知,您还必须实施某种轮询。但是对于他们来说,你可以拥有很好的长轮询周期,并告诉他们如果他们启用推送支持,刷新速度会快得多......

相关问题