当我的应用程序进入后台时,我会停用我应用中的所有计时器。实际上它只是一个计时器。我这样做的方式如下:
- (void) invalidate_timer {
if( self.timer != nil ) {
[self.timer invalidate];
self.timer = nil; <-- App crashes on this line
}
}
但是应用程序有时(并非总是)在以下行崩溃。我完全糊涂了......这怎么可能?
错误是:线程1:EXC_BAD_ACCESS(代码= 1,0xeblablabla;))
编辑:
- (void) invalidate_timer {
if( self.timer != nil ) {
[self.timer invalidate];
//self.timer = nil; <-- doing this, and the app no longer crashes
}
}
这有多疯狂???
编辑2: 这是堆栈跟踪的最重要部分:
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0:
0 libsystem_kernel.dylib 0x31985848 __kill + 8
1 BlackLane2 0x0015f85e fatal_signal_handler (PLCrashSignalHandler.m:103)
2 libsystem_c.dylib 0x3408d7e6 _sigtramp + 42
3 BlackLane2 0x0013b586 -[FutureTourDetailsVC invalidate_timer] (FutureTourDetailsVC.m:159)
答案 0 :(得分:0)
请阅读有关NSTimer class reference
方法的invalidate
。将计时器设置为nil是错误的,运行循环负责释放。