2012-02-13 6 views

답변

36

무효 타이머를 사용할 수 없습니다. 애플 문서에서

:

실행 루프에 예정 일단은, 지정된 간격으로 타이머 화재는이를 무효화 될 때까지. 비 반복 타이머는 발생 즉시 자체를 무효화합니다. 그러나 반복 타이머의 경우 은 무효화 된 메서드를 호출하여 타이머 개체를 직접 무효화해야합니다. 이 메서드를 호출하면 현재 실행 루프에서 타이머가 제거되도록 요청합니다. 결과적으로 타이머가 설치된 동일한 스레드에서 항상 무효화 된 메서드를 호출해야합니다. 타이머를 무 효화하면 더 이상 이 실행 루프에 영향을 미치지 않도록 타이머가 즉시 비활성화됩니다. 그런 다음 실행 루프는 타이머를 제거하고 해제합니다.이 타이머는 invalidate 메서드가 반환되기 직전에 수행되거나 나중에 시점에 해제됩니다. 일단 무효화되면, 타이머 오브젝트는 재사용 될 수 없습니다.

+0

흥미롭게도 NSRunLoop addTimer가 있지만 타이머를 중지하지 않고 타이머를 중지하지 않으면 유용 할 수있는 removeTimer가 없습니다. 그것은 타이머의 생성은 사과가 그 API를 추가하는 것을 괴롭히지 않도록 포트 생성보다 저렴해야합니다. –

13

일단 NSTimer를 무효화했다면 다시 사용하지 마십시오.

대신 새 타이머 인스턴스를 만들고 해당 인스턴스를 사용하여 NSRunLoop의 addTimer 메서드에 추가하십시오. 개인적으로 NSTimer의 scheduledTimerWithTimeInterval을 호출하는 것은 한 번에 모든 것을 수행하기 때문에 선호합니다. NSTimer docs에서

:

이 방법은 현재 실행 루프에서 타이머의 제거를 요청 호출

; 결과적으로 타이머가 설치된 동일한 스레드에서 항상 무효화 메서드 을 호출해야합니다. 을 무 효화하면 타이머가 즉시 비활성화되어 실행중인 루프에 더 이상 영향을 미치지 않습니다. 그런 다음 실행 루프는 타이머를 제거하고 해제합니다. 무효화 메서드가 반환되기 전에 또는 나중에 해당 시점에 중 하나만 나타납니다. 이 무효화되면 타이머 개체를 다시 사용할 수 없습니다.

+0

맞아요. 나는 그걸 알지 못했습니다 ... 감사합니다! – TheAmateurProgrammer