2010-12-26 6 views
0

타이머를 시작하는 IBAction이 있습니다.1 초 동안 실행 일시 중지

나는 특정 시간 동안 두 번째 또는 일시 중지를하고 싶습니다. 실행을 일시 중지하려면 어떻게해야합니까?

은 내가 [self performSelector:@selector(someMEthod:) withObject:someObject afterDelay:1.0];

알고하지만 어떻게 난 그냥 아무것도 호출하지 않고 지연 될 수 있습니까?

감사합니다.

답변

4

sleep() 또는 +[NSThread sleepForTimeInterval:]으로 전화 할 수 있지만 주 스레드에서는 호출하지 마십시오. 메인 스레드의 실행을 일시 중지하면 앱 UI가 그 시간 동안 차단되고 사용자에게 충돌 한 것처럼 보입니다. 메인 스레드를 몇 초 이상 차단했다면 애플의 워치 독 타이머가 앱을 즉시 죽일 것이다.

이 문제에 대한 자세한 내용은 제프 LAMARCHE하여이 블로그 게시물을 참조 : http://iphonedevelopment.blogspot.com/2010/05/psa-respect-main-thread.html

+0

차가움. 타이머를 시작하는 IBAction에 sleep()을 넣을 것입니다. sleep()이 인수를 취합니까? 또는 나는 어디서 잠을 자야 할까? 저는 버튼을 누를 때 시작되는 수많은 IBActions를 가지고 있습니다. 이러한 동작은 각각 타이머를 시작하고, 타이머 시작 간격이 필요합니다. 이 방법을 사용하면 주요 실행을 차단하지 않습니다. – jarryd

+0

왜 그렇게 생각하니? 버튼에 대한 탭 동작은 메인 스레드에서 호출됩니다. 그냥하지 마. –

+0

나는 제대로 설명하지 못했다. 동일한 IBAction에 다수의 IBActions를 연결합니다. 각 IBAction은 타이머를 시작하는 다른 함수를 호출합니다. 이 타이머들은 서로 즉시 시작됩니다. 어떻게 그 사이에 작은 지연을 넣을 수 있습니까? 다음과 같이 지연을 사용할 수 있습니까? countdownTimer2 = [NSTimer scheduledTimerWithTimeInterval : 0.10 target : 셀렉터 : @selector (handleTimer) userInfo : nil 반복 : YES]; ? – jarryd

0

sleep (int_No_of_Sec); // 예. 수면 (1);

1

당신은 아무것도를 호출하지 않고 지연 될 싶지 않아요. UI에 좋지 않으며 코코아 터치의 이벤트 중심 패러다임에 맞지 않습니다.

일시 중지하려는 루틴을 (최소한) 두 부분/반으로 자릅니다. 전반전에 후반 (지연, 타이머, 대기열 등으로 선택기를 수행)에 대한 지연 호출을 설정 한 다음 기본 루프로 돌아갑니다. 운영체제는 잠시 후에 잠재적으로 유용한 자료를 작성한 후 두 번째 부분을 호출합니다 (사용자에게 반응 형 UI를 부여하거나 배터리 수명을 절약하고 백그라운드 이메일을 따라 잡거나 등)

(루프 변수 등) 사이의 상태를 저장하기 위해 일부 새로운 프로그래머가 학습에서 놓치고있는 것처럼 보입니다.

관련 문제