2011-04-06 1 views
4

내가 다음 코드를 사용하여 4 초 지연 후 반복 NSTimer을 시작 발사하기 전에 :

- (void)viewDidLoad { 
    [self performSelector:@selector(startTimer) withObject:self afterDelay:4]; 
} 
- (void)startTimer { 
    NSTimer *mytimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(doSomething) userInfo:nil repeats:YES]; 
} 
- (void)doSomething { 
    NSLog(@"What up!"); 
} 

문제는 내가있는 사초 전에 호출되는가 startTimer을 취소해야 할 수 있습니다입니다 쪽으로. 이 일을하는 방법이 있습니까? 사실 처음에는 performSelector를 사용하지 않는 것이 좋을 것입니다. 단 NSTimer이 라인을 따라 무언가 ...

NSTimer *을 MyTimer = 있었다면 [1.0 afterDelay : 4.0 대상 : 자기 선택기 : @ 선택기 (해봐요) 유저 정보 : 반복 닐 : NSTimer scheduledTimerWithTimeInterval를 YES] ; 난 그냥 다음 호출 할 수 있기

... 그 완벽 것 :

[MyTimer로의 무효화를]

어떤 도움이나 조언은 많은 감사합니다 =)

P.S. NSObject 클래스 참조에서 cancelPreviousPerformRequestsWithTarget이라는 것을 발견했습니다. 그러나이 코드가 실행되는 곳에서 호출 할 수있는 메서드는 아닌 것 같습니다. 그것이 올바른 방향으로 돌아 오면 귀하의 의견을 환영합니다! 수행 대기중인 요청을 취소하는 방법에 포인트를 당신이 : withObject : afterDelay

+2

가능한 중복 중지 할 때 호출 [A performSelector 중지를 : 수행되는 (http://stackoverflow.com/questions/5498071/stopping-a- performselector-from-being-performing) 수행 – Vladimir

+3

반복 타이머를 끄기 위해 비 반복 타이머를 사용할 수 있습니다. –

+0

좋은 선택 인 Nick. 훨씬 더 깨끗한 옵션입니다. 감사! 안타깝게도 귀하의 의견을 답변으로 표시 할 수는 없습니다. 나는 가장 가까운 다음에 – Timbo

답변

1

[myTimer invalidate] 작동하지 않습니까? 예를 들어 클래스의 개체 추적을 유지하거나 중앙 저장소에서 개체 추적을 유지하십시오. 이렇게하면 언제 어디서나 타이머에 액세스 할 수 있으며 필요할 때마다 무효화 할 수 있습니다.

+0

을 표시해야 할 것이다. 타이머를 위해 작동한다. 그리고 이제 나는 시작 지연과 선택자를 반복하는 타이머를 분리하여 사용한다. – Timbo

0

NSTimer를 사용하여 문제를 해결하십시오.

self.autoTimer = [NSTimer timerWithTimeInterval:3.0 target:self 
selector:@selector(connectionTimeout:) userInfo:nil repeats:NO]; 
[[NSRunLoop currentRunLoop] addTimer:autoTimer 
forMode:NSDefaultRunLoopMode]; 

하고 타이머에게의

[self.autoTimer invalidate]; 

self.autoTimer = nil;