2009-09-18 60 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)时他们会有权利值。