programing

Objective-C에서 객체가 어떤 클래스에 있는지 테스트하려면 어떻게 해야 합니까?

batch 2023. 4. 26. 23:08
반응형

Objective-C에서 객체가 어떤 클래스에 있는지 테스트하려면 어떻게 해야 합니까?

Objective-C에서 객체가 특정 클래스의 인스턴스인지 테스트하려면 어떻게 해야 합니까?객체 a가 클래스 b의 인스턴스인지 클래스 c의 인스턴스인지 확인하려고 합니다. 어떻게 해야 합니까?

개체가 클래스 a의 인스턴스인지 테스트하는 방법

[yourObject isKindOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of 
// given class or an instance of any class that inherits from that class.

또는

[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a 
// given class.

개체의 클래스 이름을 가져오려면NSStringFromClass함수:

NSString *className = NSStringFromClass([yourObject class]);

or objective-c 런타임 api의 c-function:

#import <objc/runtime.h>

/* ... */

const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);

편집: In Swift

if touch.view is UIPickerView {
    // touch.view is of type UIPickerView
}

사용할 수도 있습니다.

NSString *className = [[myObject class] description]; 

모든 NS 객체에 대해

의미하는 것은 Apple 설명서의 KindOfClass입니다.

클래스 클러스터로 표시되는 개체에 이 메서드를 사용할 때는 주의하십시오.클래스 클러스터의 특성으로 인해 반환되는 개체가 항상 예상한 유형이 아닐 수 있습니다.클래스 클러스터를 반환하는 메서드를 호출하는 경우 메서드에서 반환하는 정확한 유형이 해당 개체에 대해 수행할 수 있는 작업을 가장 잘 나타냅니다.예를 들어 메소드가 NSArray 개체에 포인터를 반환하는 경우 다음 코드에 표시된 것처럼 배열이 변경 가능한지 확인하기 위해 이 메소드를 사용해서는 안 됩니다.

// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
    // Modify the object
}

코드에서 이러한 구조체를 사용하는 경우 실제로 수정해서는 안 되는 개체를 수정해도 괜찮다고 생각할 수 있습니다.이렇게 하면 개체가 변경되지 않을 것으로 예상되는 다른 코드에 문제가 발생할 수 있습니다.

특정 클래스를 확인하려면 다음을 사용할 수 있습니다.

if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}

클래스의 이름을 알고 싶으면 전화하세요:-

id yourObject= [AnotherClass returningObject];

NSString *className=[yourObject className];

NSLog(@"Class name is : %@",className);

실행 시간도 확인할 수 있습니다.코드와 내부(lldb) 콘솔 쓰기에 중단점 하나를 삽입합니다.

(lldb) po [yourObject class]

이렇게.

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/2055940/how-do-i-test-which-class-an-object-is-in-objective-c

반응형