1

アプリがバックグラウンドに入ると、アプリ内のすべてのタイマーを無効にします。実際には、タイマーは 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 に答える