2013-08-27 2 views
1

다음은 touchesMoved : withEvent : 내에서 사용하는 코드입니다. 타이머는 다음 코드로 산발적으로 해고 :무효화에도 불구하고 NSTimer가 실행되지 않고 NIL로 설정됩니다.

if(_pauseTimer) { 
       [_pauseTimer invalidate]; 
       _pauseTimer=nil; 
      } 
      //Restart the pause timer. 
      _pauseTimer = [NSTimer scheduledTimerWithTimeInterval:_settings.pauseTime 
                   target:self 
                  selector:@selector(timerExpired:) 
                   userInfo:_pauseTimer 
                  repeats:NO]; 

을 그러나 내가 주석 _pauseTimer = 전무를, 올바르게 행동하면; 즉, touchesMoved : withEvent :에 대한 호출 사이의 시간이 _settings.pauseTime이 아닌 한 다시는 실행되지 않습니다. 왜 "old"_pauseTimer가 무효화되고 무효로 설정 되더라도 주변에 매달려있는 이유는 무엇입니까?

+7

왜'_pauseTimer'를'userInfo' 인수로 전달합니까? 타이머 자체가 유지됩니다. 대신에 'nil'을 전달해야합니다. – jlehr

+1

이것은 답변이 아니지만 다음과 같은 방법으로 시도했습니다 .http : //stackoverflow.com/questions/15383782/how-to-reset-nstimer-for-touch-touch-move-in-ios – Krishnan

+0

무효화 그것을 중단해야합니다 ... 중단 점을 설정하십시오 –

답변

0

2 가지 가능한 이유가 있습니다.

  1. userInfo 타이머에 대한 사용자 정보. 지정한 객체는 타이머에 의해 유지되고 타이머가 무효화되면 해제됩니다. 이 매개 변수는 nil 일 수 있습니다.

  2. 타이머가 설치된 스레드에서 유효하지 않은 메시지를 보내야합니다. 다른 스레드에서이 메시지를 보내면 타이머와 관련된 입력 소스가 실행 루프에서 제거되지 않아서 스레드가 올바르게 종료되지 않을 수 있습니다.

관련 문제