PerfomSelector : WithObject : AfterDelay : 우선 순위가 낮은 것을 요청할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/871340

  •  22-08-2019
  •  | 
  •  

문제

이 메시지를 보낼 때 어떤 방법이 있습니까? 즉. 이벤트 대기열에서 Aterdelay 타이머에게 최우선 순위를 낮추십시오.

도움이 되었습니까?

해결책

직접적이지 않습니다. 사용하는 경우 performSelector:withObject:afterDelay: 선택기는에서 수행됩니다 메인 스레드, 정의에 따라 모든 현재 "보류중인"UI 이벤트가 수행 된 후에 발생하지만, 이것은 스크롤이나 애니메이션의 중간에있을 수 있습니다. 이는 아마도 하나의 연속적인 이벤트라고 생각하지만 실제로는 수백 개의 별도 이벤트 일 것입니다.

그러나 비슷한 사용을 달성 할 수 있습니다 performSelectorInBackground:withObject:, 그런 다음 전화합니다 [NSThread setThreadPriority:0.01] 호출되는 방법에서. 조심하십시오. 배경 스레드를 열어 UI 호출을 할 수 없습니다. 그러나이를 통해 기본 UI 스레드보다 우선 순위가 낮은 배경 스레드에서 작업을 수행 할 수 있습니다. (자체 스레드에 있으므로 자동 공급 풀을 설정해야합니다!)

다른 팁

실제로, performSelector:withObject:afterDelay: 메인 스레드에서 반드시 발생할 필요는 없습니다. 그렇기 때문에 별도의 방법이 있습니다 performSelectorOnMainThread:withObject:waitUntilDone:. 문서 performSelector:withObject:afterDelay: 말한다

수신기의 메소드를 호출합니다 현재의 지연 후 기본 모드를 사용하여 스레드.

백그라운드에서 작업을 수행하려면 조사 할 수 있습니다. +[NSThread detachNewThreadSelector:toTarget:withObject:], 이는 작업을 수행하기 위해 새 스레드를 시작하고 UI를 반응합니다. 별도의 스레드를 사용하여 장기 실행 작업을 실행하여 UI를 잠그는 것은 일반적으로 좋은 생각이지만 복잡성을 더합니다. 스레딩에 익숙하지 않으면 말이되지 않는 버그로 끝날 수 있습니다.

위의 의견에서, 당신은 애니메이션이 당신의 UI를 응답하지 않게 만드는 데 잘못되었다고 생각한다고 언급했습니다. 내장 된 애니메이션 지원 (코어 애니메이션 또는 코코아 포장지 중 하나)을 사용하는 경우 애니메이션이 UI를 응답하지 않아야합니다. 응답이없는 UI는 일반적으로 귀하의 프로그램이 런 루프가 서비스 UI 이벤트로 돌아 오도록하기 전에 주요 스레드에서 많은 작업을 수행하고 있음을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top