답변:
isKindOfClass:
YES
수신자 가 지정된 클래스 의 인스턴스 이거나 상속 하는 모든 클래스의 인스턴스 인 경우 반환 에서 된 .
isMemberOfClass:
YES
수신자 가 지정된 클래스 의 인스턴스 인 경우 에만를 리턴 합니다 .
대부분의 경우 isKindOfClass:
코드가 서브 클래스에서도 작동 하도록 하기 위해 사용하려고합니다 .
NSObject의 프로토콜 참조 이러한 방법에 대해 좀 더 이야기.
isKindOfClass:
주어진 클래스에서 객체가 상속 되는지 여부를 나타냅니다.isMemberOfClass:
객체 가 주어진 클래스 의 인스턴스 인지 여부를 나타냅니다 .[[NSMutableData data] isKindOfClass:[NSData class]]; // YES
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO
가정
@interface A : NSObject
@end
@interface B : A
@end
...
id b = [[B alloc] init];
그때
[b isKindOfClass:[A class]] == YES;
[b isMemberOfClass:[A class]] == NO;
기본적으로 -isMemberOfClass:
인스턴스가 지정된 클래스의 클래스 인 -isKindOfClass:
경우 true이고, 인스턴스가 지정된 클래스의 클래스이거나 인스턴스의 조상 중 하나가 지정된 클래스의 경우 true입니다.
-isMemberOfClass:
거의 사용되지 않습니다.
isKindOfClass : 수신자가 지정된 클래스의 인스턴스인지 또는 해당 클래스에서 상속 된 클래스의 인스턴스인지를 나타내는 부울 값을 리턴합니다.
isMemberOfClass : 수신자가 주어진 클래스의 인스턴스인지를 나타내는 부울 값을 리턴합니다.
클래스 클러스터 때문에 isMemberOfClass는 예상치 못한 답변을 제공 할 수 있습니다. 대부분의 경우 최선의 선택은-(BOOL) conformsToProtocol : (SEL) aSelector 또는-(BOOL) conformsToProtocol : (Protocol *) aProtocol 일 가능성이 높습니다. 즉, 클래스 / 서브 클래스를 테스트하는 것보다 사용자의 요구에 응답 할 수 있으면이를 테스트하는 것이 좋습니다.
NSObject 클래스 및 프로토콜에 대해서는 apple doc을 참조하십시오.