사이의 차이는 무엇입니까 isKindOfClass:(Class)aClass
와는isMemberOfClass:(Class)aClass
기능 ? 나는 그것이 작은 것과 같은 것을 알고 있습니다. 하나는 전역 적이며 다른 하나는 정확한 클래스 일치이지만 어느 것을 기쁘게 할 사람을 지정해야합니다.
스위프트 isKind(of aClass: AnyClass)
와 isMember(of aClass: AnyClass)
.
답변
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 : 수신자가 주어진 클래스의 인스턴스인지를 나타내는 부울 값을 리턴합니다.
답변
isKindOfClass-> 객체가 해당 클래스의 인스턴스 또는 상속 된 클래스의 인스턴스 인 경우 YES를 반환합니다.
isMemberOfClass : 객체가 해당 클래스의 인스턴스이면 YES를 반환하지만 다음과 같은 경우에는 No를 반환합니다.
예는 jtbandes 답변에서 충분합니다.
답변
클래스 클러스터 때문에 isMemberOfClass는 예상치 못한 답변을 제공 할 수 있습니다. 대부분의 경우 최선의 선택은-(BOOL) conformsToProtocol : (SEL) aSelector 또는-(BOOL) conformsToProtocol : (Protocol *) aProtocol 일 가능성이 높습니다. 즉, 클래스 / 서브 클래스를 테스트하는 것보다 사용자의 요구에 응답 할 수 있으면이를 테스트하는 것이 좋습니다.
NSObject 클래스 및 프로토콜에 대해서는 apple doc을 참조하십시오.