我应该使用委托来在后台运行无限循环吗?

时间:2013-10-04 18:24:06

标签: ios objective-c loops delegates

我希望有一个应用程序在给定的时间间隔(例如,5秒)内重复执行HTTP GET请求并使用响应更新某些内容(例如视图标签)。但这应该独立于用户正在做的事情。这样做的适当方法是什么?我目前唯一的想法是创建一个这样做的类,只是让视图控制器使用这个类作为委托。但是,我对iOS很新,我怀疑我正在以正确的方式解决这个问题。有什么建议?谢谢!

2 个答案:

答案 0 :(得分:3)

使用NSTimer:

[NSTimer scheduledTimerWithTimeInterval:5.0
                                 target:self
                               selector:@selector(HTTPRequest:)
                               userInfo:nil
                                repeats:YES];

这将每隔5.0秒调用一次HTTPRequest方法。

答案 1 :(得分:2)

  

在给定的时间间隔内重复...将执行HTTP GET请求并更新

这就是所谓的民意调查,这是你应该尽可能避免的事情。避免它的最好方法之一是让服务器告诉你何时发生了变化而不是不断询问。这正是push notifications旨在促进的目的。通知将显着减少您的应用程序所做的网络请求数量,并节省电池电量和用户的数据计划。

因此,如果您可以管理它,使用推送通知而不是轮询。主要的例外是,如果您知道每次请求时您检索的内容都会发生更改,则无法自行计算新值,并且您知道用户实际上非常关心每个新值。

  

这应该独立于用户正在进行的操作

如果你对信息做的唯一事情是更新显示,那么不应该独立于用户正在进行的操作。如果您每五秒发出一次请求,那么除了查看请求的结果之外,用户每隔一分钟就会发出12次不必要的请求。我可以看到拥有一个始终具有当前信息的对象的吸引力,但在电池电量和数据传输方面存在实际成本。 (它还会对您的服务器造成不必要的高负荷。)

仅在用户可能使用数据时获取数据要好得多。

相关问题