3

アプリケーションに2つのタイマーを設定しましたが、どちらも数秒ごとに繰り返されます。タイマーを無効にするときを除いて、すべてが正常に機能します。電話がロックされている場合、それらのタイマーを無効にして、電話のロックが解除されたときにそれらを再作成したいと思います。

通知を使用して、タイマーを無効化/作成するタイミングを認識しています。

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify_didBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify_willResigneActive:) name:UIApplicationWillResignActiveNotification object:nil];

これは、notify_didBecomeActiveメソッドに含まれるものです。

clockTicker = [[NSTimer scheduledTimerWithTimeInterval: 1  
                                            target: self  
                                          selector: @selector(showActivity)  
                                          userInfo: nil  
                                           repeats: YES] retain];

alarmTicker = [[NSTimer scheduledTimerWithTimeInterval: CONST_ALARMTIMER  
                                               target: self  
                                             selector: @selector(checkAndLaunchAlarm)  
                                             userInfo: nil  
                                              repeats: YES] retain];

このnotify_willResigneActiveメソッドには次のものが含まれます。

if (alarmTicker) {
    [alarmTicker invalidate];
    [alarmTicker release];
    alarmTicker = NULL;
}

if (clockTicker) {
    [clockTicker invalidate];
    [clockTicker release];
    clockTicker = NULL;
}

問題は、2番目のタイマーの無効化でこれをデバッグすると、エラーが発生することです。奇妙なことに、タイマーの順序を切り替えると(最初にclockTickerを無効にするなど)、2番目のタイマーでもエラーが発生します。

何が間違っているのでしょうか?

ありがとう、レオナルド

4

3 に答える 3

5

invalidateはタイマーを解放します。無効化した後に解放する必要はありません。そのため、タイマーがクラッシュします。しかし、私はあなたがタイマーを保持していることに気づきました...これも必要かどうかわかりません。

于 2009-09-18T18:38:51.513 に答える
0

これらのタイマーが起動するメソッド内でalarmTickerとclockTickerをnilに設定する必要があります。そうすることで、(alarmTicker)または(clockTicker)が正しい値になるかどうかを確認できます。

于 2012-08-03T18:52:29.413 に答える
-1

タイマーをnilに設定するのではなく、NULLに設定するとどうなるかはわかりませんが、nilオブジェクトを呼び出すと、何も実行されないことはわかっています。NULLオブジェクトを呼び出すと、クラッシュしたと思われますが、これは確認していません。この投稿は役立つかもしれません:Objective-CのNULL対nil

于 2009-11-06T22:03:11.863 に答える