지연된 메서드 호출은 프로젝트 개발에서 자주 사용됩니다. 구체적인 호출 시나리오는 아래에서 자세히 설명하지 않습니다. . 여러 가지 기존 방법 나열:#🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#방법 1: Performselector(권장 학습:
phpstorm
🎜 🎜🎜🎜 )
[self performSelector:@selector(delayMethods) withObject:nil afterDelay:1.0];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethods) object:nil];
현재 지연된 작업을 모두 취소하려는 경우:
[NSObject cancelPreviousPerformRequestsWithTarget:self];
따라서 하위 스레드에서 호출되면 코드의 지연 작업 코드는 항상 타이머가 예약될 때까지 기다리지만 실제로 하위 스레드에는 타이머가 없으므로 지연이 발생합니다. 작업 코드는 실행되지 않습니다.
방법 2: NSTimer
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(delayMethods) userInfo:nil repeats:NO];
분석: 이 방법은 비차단 실행 방법입니다. 다른 프로세스에 영향을 미치며 기본 스레드에서 타이머를 설정해야 합니다.
지연 작업 취소 : # 🎜🎜#[timer invalidate];
repeats 매개변수가 NO로 설정되면 실행이 완료된 후 타이머가 자동으로 삭제됩니다. YES로 설정하면 실행이 완료된 후 수동으로 실행해야 합니다. 타이머는 [타이머 무효화]를 호출해야만 소멸될 수 있습니다. 이 메서드는 차단 실행 메서드이며 하위 스레드에서 가장 잘 실행됩니다. 그렇지 않으면 실행에 영향을 미칩니다. 다른 방법의.
방법 4: GCD[NSThread sleepForTimeInterval:1.0];
이 방법은 비차단 실행 방법이며 다음을 수행합니다. 다른 프로세스에 영향을 미치지 않습니다. 매개변수에서 실행된 프로세스를 설정할 수 있습니다: dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self delayMethods];
});
dispatch_queue_t queen = dispatch_get_global_queue(0, 0);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), queen, ^{
[self delayMethods];
});
위 내용은 iOS의 여러 지연 실행 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!