0

我有一个运行一堆计时器的类,当应用程序进入后台时,我想停止它们。我当然知道这是在 appDelegate 中完成的,但是当我将timer类初始化为另一个类中的实例变量时。在 appDelegate 中获取实例对象的常用方法是什么?

我是否将didEnterBackground要停止的计时器委托给班级?

我是否将计时器设为单例?

使用通知中心?

或者,希望有比这更好的方法!

4

2 回答 2

1

你是对的 - 你唯一需要的didEnterBackground方法是你的 appDelegate 中的方法。

使用通知中心可能会给您带来很多问题(您 100% 肯定每次应用程序进入后台时,您的班级都会触发计时器?)。通知中心在这种情况下很容易导致崩溃。

这是我要做的:

  1. 在一个班级中设置我的计时器(让我们称之为TimerManager
  2. 让我的班级成为单身人士班级。
  3. TimerManager我将创建带有计时器的数组/集合。
  4. 在我的第一个 ViewController 加载(或在 AppDelegate 中)之后立即调用单例类。基本上在我的应用程序启动之后。
  5. 在我需要时添加Timers到我的 Set/Array 中。
  6. 创建一个方法stopAllTimers

\

-(void)stopAllTimers {

  for(NSTimer *timer in self.allTimers) {
   [timer invalidate];
  }
}
  1. 在我的调用这个方法didEnterBacground[[TimerManager sharedInstance] stopAllTimers]

就是这样,这是完全安全的。

于 2013-09-08T13:47:41.353 回答
1

在这里做的最简单的事情可能是在您的应用程序委托收到“ ”调用时发布通知。didEnterBackground:并让您的计时器类(或具有大量计时器的类)监听该通知。

如果您想在应用程序返回火场时重新启动计时器,则需要一个匹配的 app-delegate-does-a-post 方法。

于 2013-09-08T13:38:40.913 回答