我如何在iPhone上设置一个周期函数以在Grand Central Dispatch中运行?

我如何在iPhone上设置一个周期函数以在Grand Central Dispatch中运行?,iphone,objective-c,xcode,grand-central-dispatch,timed,Iphone,Objective C,Xcode,Grand Central Dispatch,Timed,我正在编写一个iPhone应用程序,它应该每分钟自动与服务器同步一次。我可以使应用程序同步,但我不知道如何在应用程序处于最重要位置并自动同步时在后台跟踪时间 我从来没有做过任何复杂的多线程编程,所以我对它还是相当陌生的 有人知道怎么做吗?或者至少是一个好的开始 如果你尝试每一分钟同步一次应用程序,那么这将使应用程序速度变慢并耗尽电池电量。您可以做的是,检查某些配置是否已更改,然后再同步应用程序 对于这些东西,您可能可以在某些配置更改时使用后台线程来执行任务 您需要考虑应用程序退出时的场景,在Ap

我正在编写一个iPhone应用程序,它应该每分钟自动与服务器同步一次。我可以使应用程序同步,但我不知道如何在应用程序处于最重要位置并自动同步时在后台跟踪时间

我从来没有做过任何复杂的多线程编程,所以我对它还是相当陌生的

有人知道怎么做吗?或者至少是一个好的开始

如果你尝试每一分钟同步一次应用程序,那么这将使应用程序速度变慢并耗尽电池电量。您可以做的是,检查某些配置是否已更改,然后再同步应用程序

对于这些东西,您可能可以在某些配置更改时使用后台线程来执行任务

您需要考虑应用程序退出时的场景,在AptudioDeCiTeLead后台方法中对其进行特殊处理。


您将使用的方法是-voidApplicationIdentinterBackground:UIApplication*application

一旦应用程序进入后台,您将把所有代码都放在那里

如果你每分钟都在检查服务器,我不相信这在iPhone上是可能的,但是有一种方法可以推送消息

这里有一个关于推送消息的教程

这里还有德沃尔普图书馆

您可以使用推送通知提醒用户应用中有新内容,一旦用户返回应用,应用就会检查并从服务器获取任何内容


希望这有助于

设置重复同步调用,您需要使用重复NSTimer实例。您可以在Apple的中找到设置NSTimer所需的所有示例代码

您可能希望使用dispatch\u async使用dispatch\u队列,以防止它阻塞UI。或者,如果您正在使用ASIHTTPRequest网络库,它将自动使用NSOperationQueues进行网络操作。如果没有,你就得自己做

我强烈建议您观看一些2010/2011年的Grand Central Dispatch和Blocks WWDC会话视频,我假设您是注册开发者。这个主题不仅仅是一个问题,你需要理解使用GCD的微妙之处。但需要注意的是:如果同步过程以应用程序UI更新结束,则必须通过主线程完成。您需要使用主队列通过调度异步调用UI更新方法。课程视频将对此进行解释


最后,正如其他人所提到的,每分钟攻击一次服务器都有可能导致耗电。即使你不同步,上网的简单动作也意味着iPhone每次都必须接通3G收音机的电源。只是需要注意一下。

听起来像是电池杀手。每分钟?。你当然不能在后台运行,即当用户使用不同的应用程序时,你是指在后台运行,还是在你的应用程序最重要时才运行?仅当我的应用程序最重要时。对不起,我想我不应该用background这个词。而且它不一定每分钟都同步。为了我正在做的事情,我只需要知道一分钟过去了。谢谢!这正是我想要的如果你想避免混合运行循环和调度队列,使用一个dispatch\u source\t设置为dispatch\u source\u TIMER,你可以一步完成所有这一切。