我有一个运行一堆计时器的类,当应用程序进入后台时,我想停止它们。我当然知道这是在 appDelegate 中完成的,但是当我将timer
类初始化为另一个类中的实例变量时。在 appDelegate 中获取实例对象的常用方法是什么?
我是否将didEnterBackground
要停止的计时器委托给班级?
我是否将计时器设为单例?
使用通知中心?
或者,希望有比这更好的方法!
我有一个运行一堆计时器的类,当应用程序进入后台时,我想停止它们。我当然知道这是在 appDelegate 中完成的,但是当我将timer
类初始化为另一个类中的实例变量时。在 appDelegate 中获取实例对象的常用方法是什么?
我是否将didEnterBackground
要停止的计时器委托给班级?
我是否将计时器设为单例?
使用通知中心?
或者,希望有比这更好的方法!
你是对的 - 你唯一需要的didEnterBackground
方法是你的 appDelegate 中的方法。
使用通知中心可能会给您带来很多问题(您 100% 肯定每次应用程序进入后台时,您的班级都会触发计时器?)。通知中心在这种情况下很容易导致崩溃。
这是我要做的:
TimerManager
)TimerManager
我将创建带有计时器的数组/集合。Timers
到我的 Set/Array 中。stopAllTimers
\
-(void)stopAllTimers {
for(NSTimer *timer in self.allTimers) {
[timer invalidate];
}
}
didEnterBacground
:[[TimerManager sharedInstance] stopAllTimers]
就是这样,这是完全安全的。
在这里做的最简单的事情可能是在您的应用程序委托收到“ ”调用时发布通知。didEnterBackground:
并让您的计时器类(或具有大量计时器的类)监听该通知。
如果您想在应用程序返回火场时重新启动计时器,则需要一个匹配的 app-delegate-does-a-post 方法。