2010-06-03 5 views
1

특정 유지 관리 작업이 "결국"실행되도록하고 싶습니다. 예를 들어 캐시에서 일부 리소스를 더 이상 사용할 수 없다는 것을 감지하면 다음을 호출 할 수 있습니다.Objective-C에서 연기/지연 호출을 어떻게 통합 할 수 있습니까?

[self performSelector : @selector (cleanupCache) withObject : nil afterDelay : 0.5];

그러나이 위치를 감지 할 수있는 곳이 많으며 cleanupCache를 계속 호출하고 싶지 않을 수 있습니다. CleanupCache에 대한 여러 호출을 통합하여 cleanupCache에 대한 호출을 주기적으로 하나만 얻고 싶습니다.

내가 여기에 대해 생각해 낸 것이 있습니다. 이것이 최선의 방법입니까?

[NSObject cancelPreviousPerformRequestsWithTarget : 셀렉터 : @selector (cleanupCache) object : nil]; [self performSelector : @selector (cleanupCache) withObject : nil afterDelay : 0.5];

답변

0

원하는 기능을 기본적으로 지원하지 않습니다. 프로그램에서 이것이 일반적인 경우, 주어진 객체에 메시지를 보낼 예정인지 여부를 추적하는 trampoline 클래스를 작성합니다. 20 줄 정도의 코드를 사용해서는 안됩니다.

+0

이 대답을 받아들이는 것은 고통스러운 진리입니다. 결국 원래의 질문에서 취소/수행 순서를 수행하기 위해 캐시 클래스에 대한 지원을 추가했습니다. – thrusty

0

보류중인 요청을 취소하는 대신 추적하는 것이 어떨까요? 요청을 예약 할 때 플래그를 설정하고 정리가 실행될 때이를 지 웁니다.

+0

내가 궁금해하는 것은 다음과 같습니다. NSObject에서 저를 대신 할 수있는 방법이 있습니까? 지연된 셀렉터가 대기중인 항목을 이미 추적하고 있습니다. – thrusty

관련 문제