2009-09-18 64 views
3

我已經在我的應用程序中安裝了兩個計時器,每兩秒鐘重複一次。 一切工作正常,除非是時間使定時器無效。 手機鎖定時,我想使這些定時器無效,然後在手機解鎖時重新創建它們。NSTimer與Iphone上的EXC_BAD_ACCESS崩潰時無效

我使用通知來實現何時失效/創建定時器。

[[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; 
} 

的問題是,當我調試這在第二個定時器無效,我得到錯誤。 奇怪的是,如果我切換定時器的命令(如首先使clockTicker無效)..我仍然在第二個定時器上出現錯誤。

我會做什麼錯?

感謝, 萊昂納多

回答

5

無效釋放定時器,無需無效後釋放,這就是爲什麼它的崩潰。但我只注意到你保留了計時器......我不確定這是否是必要的。

+0

也許..但無論如何它不工作。是第二個計時器崩潰,而不是釋放線。我無法獲得太多的信息.​​.將嘗試使殭屍,看看有什麼我失蹤。 – Homer1980ar 2009-09-22 17:29:46

-1

我不知道什麼設置計時器爲NULL,而不是將其設置爲零,但我知道如果你打一個無對象的調用,它是一個無操作。如果你對一個NULL對象進行調用,它認爲它崩潰了,儘管我沒有證實這一點。這個帖子可能有所幫助:NULL vs nil in Objective-C

0

你只需要設置alarmTicker和clockTicker爲零,在那些定時器觸發的方法裏,當你檢查if(alarmTicker)或者if(clockTicker)時他們會有權利值。