与EXC_BAD_ACCESS在iPhone无效时坠毁的NSTimer
-
22-07-2019 - |
题
我已经安装在我的申请两个定时器其中两个每隔几秒钟重复。 一切正常,除非是时间无效定时器罚款。 当手机处于锁定状态,我想那些无效计时器,然后重新创建这些当手机被解锁。
使用IM的通知来实现时无效/创建定时器。
[[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)..我仍然有在第二计时器的误差。
我应该怎么做了?
谢谢, 莱昂纳多
解决方案
无效释放定时器,无需无效后释放,这就是为什么它的崩溃。但我只注意到你保留定时器...林不知道,这是必要的要么。
其他提示
您只需要alarmTicker和clockTicker设为零,这些计时器火灾,这样一来当你做你检查的方法中,如果(alarmTicker),或者如果(clockTicker)他们就会有正确的值。
我不知道该怎样计时器设置为NULL做而不是将其设置为零,但我知道,如果你让一个nil对象上的电话,这是一个空操作。如果你做一个NULL对象的调用,它认为它崩溃了,虽然我还没有证实这一点。这篇文章可以帮助: NULL VS未缴的Objective-C
不隶属于 StackOverflow