차례:
- 객체 클래스 가져 오기
- 클래스 객체에 대한 핸들을 얻은 후에는 Objective-C에 제공된 내부 검사 함수를 사용하여 런타임에 검사 할 수있다.예를 들어,이 객체를 테스트하여 어떤 종류인지 확인할 수 있습니다. 특정 메소드 또는 특정 속성이 있는지 검사하기 위해 검사 할 수 있습니다.
비디오: 복제 불가능한 인공 미세지문 개발 / YTN 사이언스 2024
Introspection은 iOS 응용 프로그램의 기능을 말합니다. 런타임시 객체와 클래스의 구조 및 기타 세부 사항을 검사하는 프로그래밍 언어입니다. 이러한 세부 사항은 다음을 포함 할 수 있습니다:
-
객체의 상속 트리
-
특정 프로토콜을 따르는 지 여부
-
특정 메시지에 응답하는지 여부
객체가 무엇인지를 알 때 프로그래밍 방식으로 메시지를 생성 할 수 있습니다 그것을 보내면 프로그램을 훨씬 더 동적으로 만들 수 있습니다.
객체 클래스 가져 오기
객체 클래스를 런타임에 가져올 수 있습니다. 실제로 Objective-C는 클래스를 1 급 개체로 처리합니다. 모든 클래스 객체는 메모리의 데이터 구조를 가리키며 수퍼 클래스 (metaclass 라고 함)를 가지며 메소드를 호출하는 메시지에 응답 할 수 있습니다.
클래스 메소드를 호출하면 실제로 클래스 객체에 메시지를 보냅니다.
StackOfInteger * aStack = [[StackOfInteger alloc] init]; NSLog (@ "클래스는 % @이고 슈퍼는 % @입니다.", [aStack 클래스], [aStack 슈퍼 클래스]);메서드를 동적으로 호출하는 방법
Class postfixCalculatorClass = [someObject class]; [postfixCalculatorClass performSelector: @selector (printClassDescription)];
여기서 두 가지 항목을 설명해야합니다. 첫째, @selector는
컴파일시 지시문이며 printClass 메소드에 대한 포인터를 반환합니다. 둘째, performSelector를 사용하여 실제로 해당 메서드를 호출 할 수 있습니다. 앞의 예제에서, 메소드 이름은 컴파일 타임에 메소드에 대한 포인터로 변환되었습니다. 다음과 같이 메소드의 문자열 이름을 런타임에 사용하여 객체에 대한 인스턴스 메서드를 호출 할 수도 있습니다.
SEL printClassDescriptionSEL = NSSelectorFromString (@ "printClassDescription"); [postfixCalculatorClass performSelector: printClassDescriptionSEL];
이 예에서는 메소드의 내부 표현을 보유하기 위해 SEL 유형 (Objective-C 언어의 선택기라고도하며 SEL)을 사용할 수 있습니다.
객체 명세를 검사하는 방법
클래스 객체에 대한 핸들을 얻은 후에는 Objective-C에 제공된 내부 검사 함수를 사용하여 런타임에 검사 할 수있다.예를 들어,이 객체를 테스트하여 어떤 종류인지 확인할 수 있습니다. 특정 메소드 또는 특정 속성이 있는지 검사하기 위해 검사 할 수 있습니다.
아래 표는 클래스 객체의 구조와 기능을 테스트하고 그에 대한 액션을 수행하는 모든 메소드를 보여줍니다.
Method
Question or Action | - (BOOL) isKindOf: class-object |
---|---|
객체가 클래스의 멤버이거나 하위 클래스인가? | - (BOOL) isMemberOf: class-object |
객체가 클래스의 멤버입니까? | - (BOOL) respondsTo: selector |
객체가 메소드에 응답 할 수 있습니까? | + (BOOL) instancesRespondTo: selector |
클래스의 인스턴스가 메시지에 응답 할 수 있습니까? | - (id) perform: selector |
selector로 지정된 메소드를 적용합니다. | + (BOOL) conformsToProtocol: (Protocol *) |
aProtocol 수신자가 프로토콜 aProtocol을 준수하면 YES입니다. 그렇지 않으면 아니오. | 내성 및 사용 방법에 대한 자세한 내용은 Apple iOS 런타임 참조 및 Apple Developer Objective-C 런타임 프로그래밍 가이드를 참조하십시오. |