대기중인 performSelector : afterDelay 호출 취소


115

호출 할 때 이벤트 스택 또는 타이머 스택 (또는 API에서 사용하는 메커니즘)에서 이미 대기중인 선택기 이벤트를 취소 할 수 있는지 아는 사람이 performSelector:withObject:afterDelay있습니까?

이 이벤트 스택을 사용하여 TabBar 탭 내에서 이미지의 속성을 변경했으며, 때로는 빠르게 실행되는 for 루프에서 최대 10 초 분량의 변경 사항을 대기열에 넣었습니다. 어쩌면 5 밀리 초 정도였습니다.

사용자가 탭을 전환하면 문제가 발생합니다. 예를 들어 탭 # 4가 활성화 되 자마자 표시되는 이미지에 대해 이미지 변경이 대기열에있는 경우 사용자가 빠르게 탭 # 3으로 전환 한 다음 다시 탭으로 돌아갑니다. # 4 ... 이렇게하면 이전 대기열이 계속 재생되는 동안 10 초 분량의 변경 사항이 다시 대기열에 추가됩니다. 충분히 빠르게 전환하면 대기열에 약 2 ~ 3 초가 추가됩니다. 스트림이 문제였습니다.

그래서 새 스택을 넣기 전에 이전 스택 변경 사항을 취소 할 방법이 필요했습니다.

재생 기능에 호크 아이드 이벤트 필터를 추가하여이 문제에 대한 대체 솔루션을 이미 생각해 냈기 때문에이 쿼리를 과거형으로 작성하고 있습니다. 하지만 이벤트 취소가 가능한지 궁금합니다. 그런 지식이 앞으로도 도움이 될 것 같아서요. 도움을 주셔서 감사합니다 :)


재생 기능에서 호크 아이드 이벤트 필터를 어떻게 사용할 수 있습니까?
Maniganda saravanan 2014 년

답변:


241
[NSObject cancelPreviousPerformRequestsWithTarget:]

또는

[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:]

target있는 원래의 목적 performSelector:afterDelay:이라고했다.

예를 들면 :

// schedule the selector
[self performSelector:@selector(mySel:) withObject:nil afterDelay:5.0];
// cancel the above call (and any others on self)
[NSObject cancelPreviousPerformRequestsWithTarget:self];

설명 의 끝 부분에있는 apple 문서를 참조하십시오 performSelector:withObject:afterDelay:.


33
사용에 대한 설명을 보려면 다음을 시도하십시오. [NSObject cancelPreviousPerformRequestsWithTarget : self];
dnstevenson 2011-06-01

[NSObject cancelPreviousPerformRequestsWithTarget : 자체 선택기 : @selector (mySel :) object : nil];
webtrick101

2

이전 수행 요청을 모두 취소하려면 다음을 사용할 수 있습니다.

[NSObject cancelPreviousPerformRequestsWithTarget:self];   

2

" cancelPreviousPerformSelector"와 일치하는 "performSelector"를 찾고 있다면 그렇지 않습니다. (어, 애플, 왜 나 한테 그렇게하는거야 ???)

"일치"방법은 다음과 같습니다.

performSelector

cancelPreviousPerformRequestsWithTarget

(문서를 검색하지 않고 기억하기 더 어렵게 만드십시오.)


1

NSRunLoop 문서를 확인하십시오. 원하는-cancelPerformSelectorsWithTarget:

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.