2010-03-25 4 views

답변

2

NSInvocation 님의 메시지 본문 보내기 보낼 수 있습니다. 즉, 메시지를 보내는 것을 나타내는 개체입니다.

-(void)doSomething { 
    NSInvocation *inv = [NSInvocation invocationWithMethodSignature: [self methodSignatureForSelector: @selector(foo)]]; 
    [inv setTarget: self]; 
    [inv invoke]; 
} 

그런 다음 [자기 해봐요]을 말 [자기 foo는] 기능적으로 같은 일 말 : [푸 foo는,이 같은 방법 -

는 클래스 푸라는 메소드를 가지고 말.

왜이 작업을 수행 하시겠습니까? CubePuzzle 샘플 앱은 하나의 아이디어를 제공합니다. 또 다른 메시지는 NSTimer에 의해 트리거되는 메시지 전송을 예약하는 것입니다.

+0

나는 CubsPuzzle을 실행할 수 없다. [inv invoke]; [self foo]; [inv invoke]를 사용해야하는 이유는 무엇입니까? –

+0

어떤 의미에서 그들은 동일합니다. 다른 의미에서, 그들은 별개입니다. 개체에 메시지를 즉시 보내는 대신 NSInvocation과 NSTimer를 사용하여 해당 호출을 지연하도록 선택할 수 있습니다. 또는 CubePuzzle 에서처럼 선택기 호출과 분리하여 실행할 선택기를 선택할 수도 있습니다 (가독성/확장 성 향상을 위해). –