2013-06-29 2 views
1

특정 시간 후에 메소드를 호출하려고합니다. 이것은 단지 예입니다. 나는 무엇을 할 수 ... 처음에특정 시간 이후에 인수가있는 메소드 호출

- (void)myMethod:(int)value1 setValue2:(CGPoint)value2{ 

//Do Something with values 


} 

나는

[self scheduleOnce:@selector(myMethod:setValue2:) delay:timeToWait]; 

생각하지만, 필자는 대안을 너희들을 요구하므로, 선택기를 사용할 때이 인수를 전달할 수없는 이유는 무엇입니까? 시간을 내 주셔서 감사 드리며 좋은 하루 보내십시오!

+1

에 객체 매개 변수로 그 전달합니다. –

+1

@newStackExchangeInstance 전적으로 동의합니다. 내가 추가 한 태그인지 알지 못했습니다. 정직한 실수, 미안 해요! – user1876553

답변

4

GCDdispatch_after을 시도 할 수 있습니다. 예를 들어 :

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self myMethod:someValue setValue2: someValue2]; 
    }); 
+0

@ user1876553 또 다른 옵션은'NSTimer'를 사용하는 것이지만'dispatch_after'를 사용하는 것이 훨씬 더 좋은 해결책입니다. – rmaddy

+0

@rmaddy dispatch_after를 시도했지만 어떤 이유로 전체 프로그램이 중지되었습니다. 나는 'delayInSeconds'대신 '1'을 사용했습니다. #define 무엇인가 필요합니까? :/나는 어떤 일이 일어나고 있는지를보기 위해 로그를 추가했다. 그렇지 않다. ... – user1876553

+1

'delayInSeconds'를'1'로 바꾸는 것이 좋습니다. 코드가 작동해야합니다. 전체 프로그램이 중단되었다고 말하면 무엇을 의미합니까? 앱이 다운되었거나 UI가 중단 되었습니까? 아마 당신은 교착 상태 또는 무한 루프로 끝났을 것입니다. 디버거에서 일시 중지 아이콘을 탭하고 중지 된 것으로 표시되면 어떻게되는지보십시오. – rmaddy

1

당신은 NSDictionary로 인수를 넣을 수 있고 나는이 C#을하지 않습니다 확신 - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay

+0

GCD를 사용하지 않는 경우 +1. 나는 이상한 블록 구문을 견딜 수 없다. – herzbube

+0

@herzbube 블록을 포용하는 법을 배웁니다. 그것은 많은 문제를 해결하고 많은 것들을 더 쉽게 만듭니다. 완전히 새로운 메소드를 만들고 매개 변수 값의 사전을 패키지화 (그리고 압축을 풀기)하는 것은 블록에 대한 간단한 호출을 만드는 것보다 훨씬 더 효과적입니다. 사전에 전체 인수 세트를 넣으면 컴파일러가 모든 유형 검사를 수행 할 필요가 없으며 'int'또는 'float'과 같은 원시 유형을 래핑하는 오버 헤드가 필요합니다. Granted 블록 구문은 학습하는 데 다소 시간이 걸리지 만'performSelector :'를 호출하기 위해 작성해야하는 모든 오버 헤드 코드와 비교해보십시오. – rmaddy

+0

@rmaddy 일반적으로 말하자면, 나는 간결함과 성능보다는 명확성을 선호합니다. 나는 원래 그 물건을 썼을 때 내 자신의 영리함을 헤쳐 나갈 필요없이 2 년 만에 나의 코드를 읽을 수 있기를 원합니다. 그 때문에 나는 오버 헤드 코드의 일정량을 기꺼이 쓰려고한다. 즉, 나는 오버 헤드의 일정한 한계에 도달 한 후에 블록을 사용해야한다고 동의합니다. – herzbube

관련 문제