进入后台时使 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 的时间保存到磁盘