내 코드 :NSTimer 화재 문제 (없는 일반적인 무효화 문제) 아래
- (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이 더 짧아졌습니다. 어쨌든 갑자기 더 빠르게 실행됩니다.
< _ NSCFTimer :
는 지금, 나는 다음과 같이 뭔가 발견 fireHandler에 보낸 사람을 추가하고, 메모리 주소를 확인 NSLog를 사용 0x4e610a0을> < _NSCFTimer : 0x4e610a0> < _ NSCFTimer : 0x4e610a0> < _NSCFTimer : 0x4e610a0> < _ NSCFTimer : 0x4e610a0> < _NSCFTimer : 0x4e610a0>
... 반복 ... 항상 동일한 타이머임을 나타냅니다. 하지만 가끔은 내가 "다시 시작"을 호출 할 때 다시는
<을 나타냅니다 _ NSCFTimer : 0x4e3d740> < _NSCFTimer : 0x4e610a0> < _ NSCFTimer : 0x4e3d740> < _NSCFTimer : 0x4e610a0> < _ NSCFTimer : 0x4e3d740> < _NSCFTimer : 0x4e610a0> ... 그것은 두이 거기 의미
반복imer, 그것은 첫 번째가 무효화되어 출시되지 않은 것으로 보입니다. 그것은 동시에 두 번째 것과 동시에 실행되고, 몇 초 후에, 두 번째 것이 제거 된 후에도 첫 번째 것은 아직 살아 있습니다.
잠시 후 다시 나타납니다. 이러한 상황은 규칙이 없어도 전체 시간의 약 30 %가 발생합니다. 나는 이것에 대해 전혀 몰랐다. 누군가가 내게 정확히 어떤 문제를 일으킬 수있는 아이디어를 줄 수 있다면, 적어도.
매번 같은 스레드에서 'restart'를 호출해야합니다. –