수색…


NSInvocation 목표 -C

원본을 참조하십시오 e.James의 게시물

Apple의 NSInvocation 클래스 참조 에 따르면

NSInvocation 은 정적으로 렌더링 된 Objective-C 메시지입니다. 즉, 객체로 변환 된 동작입니다.

그리고 조금 더 자세하게 설명하면 다음과 같습니다.

메시지의 개념은 객관적인 철학의 핵심입니다. 메서드를 호출하거나 개체의 변수에 액세스 할 때마다 메시지를 보냅니다. NSInvocation 은 다른 시점에 객체에 메시지를 보내거나 동일한 메시지를 여러 번 보내려는 경우에 유용합니다. NSInvocation 사용하면 보내려는 메시지를 설명 하고 나중에 호출 할 수 있습니다 (실제로 대상 개체로 보냅니다).


예를 들어 배열에 문자열을 추가하려고한다고 가정 해 봅시다. 일반적으로 다음과 같이 addObject: 메시지를 보냅니다.

[myArray addObject:myString];

이제 NSInvocation 을 사용하여 다른 시점에서이 메시지를 보내려고한다고 가정 해 NSInvocation .

먼저 NSMutableArrayaddObject: selector와 함께 사용할 NSInvocation 객체를 준비합니다.

NSMethodSignature * mySignature = [NSMutableArray
    instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
    invocationWithMethodSignature:mySignature];

다음으로 메시지를 보낼 개체를 지정합니다.

[myInvocation setTarget:myArray];

해당 개체로 보내려는 메시지를 지정하십시오.

[myInvocation setSelector:@selector(addObject:)];

그리고 그 방법에 대한 모든 인수를 기입하십시오 :

[myInvocation setArgument:&myString atIndex:2];

오브젝트 인수는 포인터에 의해 전달되어야합니다. Ryan McCuaig 에게 지적 해 주셔서 감사 드리며 자세한 내용은 Apple의 설명서 를 참조하십시오.

이 시점에서 myInvocation 은 보낼 수있는 메시지를 설명하는 완전한 개체입니다. 실제로 메시지를 보내려면 다음을 호출하십시오.

[myInvocation invoke];

이 마지막 단계는 메시지가 전송되도록합니다. 기본적으로 [myArray addObject:myString]; .

전자 우편을 보내는 것처럼 생각하십시오. 새 전자 메일 ( NSInvocation 개체)을 열고 보낸 사람 (개체)의 주소를 채우고받는 사람의 메시지를 입력하고 ( selector 와 인수를 지정) 보낸 다음 "보내기"를 클릭합니다. (호출 invoke ).

자세한 내용은 NSInvocation 사용 을 참조하십시오.


NSUndoManagerNSInvocation 객체를 사용하여 명령을 되돌릴 수 있습니다. 본질적으로, 당신이하는 일은 NSInvocation 객체를 생성하는 것입니다. "이봐 요, 방금 한 일을 원상태로 돌리고 싶다면,이 논점과 함께이 메시지를 그 객체에 보냅니다". NSInvocation 객체를 NSUndoManager , 객체를 실행 취소 가능한 동작의 배열에 추가합니다. 사용자가 "실행 취소"를 호출하면 NSUndoManager 는 배열에서 가장 최근의 작업을 찾고 저장된 NSInvocation 객체를 호출하여 필요한 작업을 수행합니다.

자세한 내용은 실행 취소 작업 등록 을 참조하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow