iOS
NSInvocation
수색…
NSInvocation 목표 -C
Apple의 NSInvocation 클래스 참조 에 따르면
NSInvocation
은 정적으로 렌더링 된 Objective-C 메시지입니다. 즉, 객체로 변환 된 동작입니다.
그리고 조금 더 자세하게 설명하면 다음과 같습니다.
메시지의 개념은 객관적인 철학의 핵심입니다. 메서드를 호출하거나 개체의 변수에 액세스 할 때마다 메시지를 보냅니다. NSInvocation
은 다른 시점에 객체에 메시지를 보내거나 동일한 메시지를 여러 번 보내려는 경우에 유용합니다. NSInvocation
사용하면 보내려는 메시지를 설명 하고 나중에 호출 할 수 있습니다 (실제로 대상 개체로 보냅니다).
예를 들어 배열에 문자열을 추가하려고한다고 가정 해 봅시다. 일반적으로 다음과 같이 addObject:
메시지를 보냅니다.
[myArray addObject:myString];
이제 NSInvocation
을 사용하여 다른 시점에서이 메시지를 보내려고한다고 가정 해 NSInvocation
.
먼저 NSMutableArray
의 addObject:
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 사용 을 참조하십시오.
NSUndoManager
는 NSInvocation
객체를 사용하여 명령을 되돌릴 수 있습니다. 본질적으로, 당신이하는 일은 NSInvocation
객체를 생성하는 것입니다. "이봐 요, 방금 한 일을 원상태로 돌리고 싶다면,이 논점과 함께이 메시지를 그 객체에 보냅니다". NSInvocation
객체를 NSUndoManager
, 객체를 실행 취소 가능한 동작의 배열에 추가합니다. 사용자가 "실행 취소"를 호출하면 NSUndoManager
는 배열에서 가장 최근의 작업을 찾고 저장된 NSInvocation
객체를 호출하여 필요한 작업을 수행합니다.
자세한 내용은 실행 취소 작업 등록 을 참조하십시오.