1

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

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

1 回答 1

0

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

于 2012-08-31T18:34:24.170 回答