进入后台时使 NSTimer 无效

Posted

技术标签:

【中文标题】进入后台时使 NSTimer 无效【英文标题】:Invalidate an NSTimer when going into background 【发布时间】:2010-12-15 15:26:28 【问题描述】:

当我的应用程序进入后台时,我试图使计时器无效。当您点击启动计时器并且位于 TimerController.m 文件中的按钮时,将调用计时器。以下是它的调用方式。

    mytimer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];//Timer with interval of one second
    [[NSRunLoop mainRunLoop] addTimer:mytimer forMode:NSDefaultRunLoopMode];

现在,我想在应用程序进入后台时使 mytimer 无效,所以我尝试将 [mytimer 无效]; 进入应用程序委托的 - (void)applicationDidEnterBackground:(UIApplication *)application 方法。但这不起作用,因为它没有在委托中声明。我认为通过将 TimerController.h 包含到委托中,这会起作用,但不会。

所以,我显然不知道我在这里做什么。你能帮我吗?怎么弄到mytimer在app进入后台时失效?

【问题讨论】:

【参考方案1】:

当应用程序进入后台时,还会发布UIApplicationDidEnterBackgroundNotification 通知。您可以在控制器中订阅此通知并在那里处理转换:

[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(goBackground)
    name:UIApplicationDidEnterBackgroundNotification
    object:nil];

// and later:
- (void) goBackground 
    [timer invalidate], timer = nil;

【讨论】:

【参考方案2】:
if (timer) 
        [timer invalidate];
        timer = nil;
    

在 applicationReEnteredForeground 通知方法也可以工作

【讨论】:

以上是关于进入后台时使 NSTimer 无效的主要内容,如果未能解决你的问题,请参考以下文章

进入后台状态时是不是可以在 iOS 4 设备上运行 NSThread 或 NSTimer?

快速 NSTimer 在后台

在进入后台和在前台检索时将 NSTimer 的时间保存到磁盘

我们如何让 NSTimer 在 iOS 中为我​​的音频播放器在后台运行

检测应用程序何时最小化(iOS)

当我使用 popOver 时,NSTimer 似乎无效