使用nstimer的奇怪分段错误错误

时间:2012-08-28 19:25:57

标签: ios nstimer

当我的应用程序进入后台时,我会停用我应用中的所有计时器。实际上它只是一个计时器。我这样做的方式如下:

- (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)

1 个答案:

答案 0 :(得分:0)

请阅读有关NSTimer class reference方法的invalidate。将计时器设置为nil是错误的,运行循环负责释放。