мой код, как показано ниже:
- ( void ) restart {
[ self pause ];
//init something here...
[ self proceed ];
}
- ( void ) pause {
if ( [ _timer isValid ] ) {
[ _timer invalidate ];
_timer = nil;
}
}
- ( void ) proceed {
_timer = [ NSTimer scheduledTimerWithTimeInterval: 0.1 target: self selector: @selector ( fireHandler ) userInfo: nil repeats: YES ];
}
В основном все работает нормально, но я обнаружил, что в некоторых случаях после того, как я вызывал метод «перезапуск» более одного раза, иногда вызывался fireHandlerболее одного раза в течение одного timeInterval (или timeInterval стал короче, во всяком случае, он работает быстрее внезапно).
Теперь я добавляю отправителя в fireHandler и использую NSLog для проверки адреса памяти.что-то как показано ниже:
<_ <em>NSCFTimer: 0x4e610a0> <</em> _NSCFTimer: 0x4e610a0> <_ <em>NSCFTimer: 0x4e610a0> <</em> _NSCFTimer: 0x4e610a2> N: 0x4e610a0> <</em> _NSCFTimer: 0x4e610a0>
и повторить ... Это означает, что это всегда один и тот же таймер.Но иногда, когда я снова вызываю «restart», это указывает
<_ <em>NSCFTimer: 0x4e3d740> <</em> _NSCFTimer: 0x4e610a0> <_ <em>NSCFTimer: 0x4e3d740> <</em> _NSCFTimer:0x4e610a0> <_ <em>NSCFTimer: 0x4e3d740> <</em> _NSCFTimer: 0x4e610a0> ... повторяется
Это означает, что есть два таймера. Похоже, что первый из них не был недействительным и был выпущен вовремя,Он работает со вторым одновременно, а спустя несколько секунд после удаления второго, даже если первый еще жив!
Через некоторое время он снова появится.Такая ситуация не очень часто, без правил, это происходит около 30% всего времени.Я не имею ни малейшего представления об этом .... Пожалуйста, если кто-нибудь может дать мне какую-то идею, по крайней мере, решить проблему.