Effective Objective-C 2.0-12조: 메시지 전달 메커니즘 이해
12개 설명 대상이 해석할 수 없는 소식을 받은 후 무슨 일이 발생하면'메시지 전송'(message forwarding) 메커니즘을 시작합니다.
4
4
4
4
동적 방법 해석
대상은 판독할 수 없는 소식을 받은 후, 우선 그 소속 클래스의 아래의 클래스 방법을 호출한다
+ (BOOL)resolveInstanceMethod:(SEL)selector
반환 값은 BOOL입니다. 이 클래스가 이 선택을 처리하는 데 사용할 실례를 추가할 수 있는지 여부를 나타냅니다.
이런 방법을 사용하는 전제는 관련 방법의 실현 코드가 이미 작성되었고 운행할 때만 클래스에 동적으로 삽입하면 된다는 것이다.이 방안은 @dynamic 속성을 실현하는 데 자주 사용됩니다. 예를 들어CoreData 프레임워크의 NSManagedObjects 대상의 속성에 접근할 때 이렇게 할 수 있습니다. 이러한 속성을 실현하는 데 필요한 접근 방법은 컴파일링 기간에 확정될 수 있기 때문입니다.
다음 코드는 @dynamic 실행을'resolveInstanceMethod'로 하는 방법을 보여 줍니다.
id autoDictionaryGetter(id self, SEL _cmd); void autoDictionarySetter(id self, SEL _cmd, id value); + (BOOL)resolveInstanceMethod:(SEL)selector { NSStirng *selectorString = NSStringFromSelector(selector); if (/*selector is from a @dynamic property */) { if ([selectorString hasPerfix:@"set"]) { class_addMethod(self, selector, (IMP)autoDictionarySetter, "v@:@"); } else { class_addMethod(self, selector, (IMP)autoDictionaryGetter, "@@:"); } return YES; } } return [super resolveInstanceMethod:selector]; }
우선 선택자를 문자열로 바꾸어 설정 방법을 표시하는지 확인합니다.
지원 수용자
- (id)forwardingTargetForSelector:(SEL)selector
전체 메시지 전달
먼저 NSInvocation 객체를 만들고 처리되지 않은 메시지와 관련된 모든 세부 사항을 봉합니다.이 대상은 selector, target, 그리고 파라미터가 NSInvocation 대상을 터치할 때 메시지 발송 시스템 (message-dispatch system) 이 직접 나서서 메시지를 목표 대상에게 파견합니다.
- (void)forwardInvocation:(NSInvocation *)invocation
메시지 전달 전체 프로세스
완전한 예로 동적 방법의 해석을 보여 주다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.