0

たくさんのタイマーを実行するクラスを取得しましたが、アプリがバックグラウンドに入ったら停止したいと思います。もちろん、これは appDelegate で行われることは知っていますが、timerクラスを別のクラスでインスタンス変数として初期化したとき.. appDelegate でインスタンス オブジェクトを取得する一般的な方法は何ですか?

didEnterBackground停止したいタイマーをクラスに委任しますか?

タイマーをシングルトンにしますか?

通知センターを使用しますか?

または、うまくいけば、これよりも良い方法があります!

4

2 に答える 2

1

その通りです。必要な唯一のメソッドdidEnterBackgroundは、appDelegate のメソッドです。

通知センターを使用すると、多くの問題が発生する可能性があります (アプリがバックグラウンドに入るたびに、クラスでタイマーが起動することを 100% 確信していますか?)。この場合、通知センターは簡単にクラッシュを引き起こす可能性があります。

これが私がすることです:

  1. 1 つのクラスでタイマーを設定します (名前を付けましょうTimerManager)
  2. クラスをシングルトン クラスにします。
  3. ではTimerManager、タイマーを使用して配列/セットを作成します。
  4. 最初の ViewControllers がロードされた直後 (または AppDelegate 内) にシングルトン クラスを呼び出します。基本的に、アプリが起動した直後。
  5. Timers必要なときにセット/配列に追加します。
  6. メソッドを作成するstopAllTimers

\

-(void)stopAllTimers {

  for(NSTimer *timer in self.allTimers) {
   [timer invalidate];
  }
}
  1. my でこのメソッドを呼び出しますdidEnterBacground[[TimerManager sharedInstance] stopAllTimers]

それだけで、これは完全に安全です。

于 2013-09-08T13:47:41.353 に答える