2010-08-27 69 views

回答

2

实际上,如果您只需要维护计时器,则无需在后台运行。在您的应用代理的applicationWillTerminate:中,创建一个包含NSTimer消防时间的NSDictionary,并使用-[NSDictionary writeToFile:atomically:]将其写入plist,然后在应用代理的application:didFinishLaunchingWithOptions:的某处使用-[NSDictionary initWithContentsOfFile:]读回。

如果您正在后台运行,请在applicationDidEnterBackground:applicationWillEnterForeground:中执行相同操作。如果您使用此解决方案,请务必在写入plist后使计时器无效。

+0

谢谢约翰,我正在尝试这个http://stackoverflow.com/questions/1587918/is-it-possible-to-save-the-state-of-a-timer-in-the-user-defaults 。相当困惑,但按下主页按钮时,应用程序会进入后台还是终止?还有在后台时,NSTimers会失效吗? – Ronn 2010-08-27 21:12:49

+0

按住home按钮时的行为在iPhone OS 3.x和iOS 4.0中不同。在4.0中,applicationWillTerminate不会被调用,并且您的应用程序(通常)会被放入后台,定时器不会触发,但它们不会失效(除非您自己在暂停方法中执行此操作);他们会在你的应用程序被带回到前台时再次开始启动。但是你的应用可能也会被杀死并重新启动。 – hotpaw2 2010-08-27 23:32:56

+0

在您的MyApp-Info.plist中,具有原始键UIApplicationExitsOnSuspend(友好值:应用程序不会在后台运行)的条目确定调用的是applicationWillTerminate:或applicationDidEnterBackground :.我不相信计时器失效,但我不确定他们是否在后台开枪。任何已经通过的定时器都可能在应用程序激活时立即启动。第二代iPod Touch和iPhone 4之间的这种行为也可能有所不同。 – 2010-08-28 13:29:00