当计时器进入后台时,如何使计时器无效?

时间:2011-11-15 06:27:31

标签: iphone objective-c cocoa-touch ios4 nstimer

在我的应用程序中,我使用了计时器,

当第一次启动计时器时,我想在后台进入时停止该计时器,

所以我用这段代码来停止计时器,

 - (void)applicationWillEnterForeground:(UIApplication *)application
{
  FirstViewController *view = [[FirstViewController alloc]init];
 [view.myticker invalidate];    //myticker is timer
    view.myticker = nil;
 [view release];
}

我在Foreground委托方法调用

时使计时器无效

但是当来到viewcontroller时,旧计时器仍在运行,

当计时器进入后台时,如何使计时器无效?

3 个答案:

答案 0 :(得分:4)

没有必要将你的计时器移动到你的代表,事实上这是一个非常糟糕的主意,因为它没有任何目的在那里!

您应该观察以下通知(取决于操作系统版本,后者在OS4 +中)...

UIApplicationWillResignActiveNotification UIApplicationDidEnterBackgroundNotification

在视图控制器中观察这些并使计时器无效。当应用程序再次启动时会有相应的通知......

UIApplicationDidBecomeActiveNotification UIApplicationWillEnterForegroundNotification

答案 1 :(得分:1)

NSTimer方法中声明您的AppDelegate变量并进行综合。然后使用AppDelegate的sharedApplication,在整个项目中使用该变量,不要创建任何新变量。还要对同一个实例变量执行invalidate方法。

答案 2 :(得分:0)

在一个全局文件中创建一个时间。

在app delegate方法中,

- (void)applicationDidEnterBackground:(UIApplication *)application {

    NSTimer *t ;
    if ([t isValid]) {
        [t invalidate];
    }

}

使用上面的代码可以帮助你在应用程序进入后台时停止计时器。