[ios] isKindOfClass와 isMemberOfClass의 iOS 차이점

사이의 차이는 무엇입니까 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을 참조하십시오.

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/cl/NSObject

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intf/NSObject


답변