programing

isKindOfClass와 isMemberOfClass의 iOS 차이점

lastcode 2023. 4. 22. 09:31
반응형

isKindOfClass와 isMemberOfClass의 iOS 차이점

의 차이는 무엇입니까?isKind(of aClass: AnyClass)및 그isMember(of aClass: AnyClass)Swift에서 기능합니까?

목표-C의 원래 질문

의 차이는 무엇입니까?isKindOfClass:(Class)aClass및 그isMemberOfClass:(Class)aClass기능하고 있습니까?하나는 글로벌하고 다른 하나는 클래스 매치인 것처럼 작은 것이지만, 어느 쪽이 좋은지 특정해 주셨으면 합니다.

isKindOfClass:돌아온다YES수신기가 지정된 클래스의 인스턴스 또는 지정된 클래스에서 상속된 클래스의 인스턴스인 경우.

isMemberOfClass:돌아온다YES수신기가 지정된 클래스의 인스턴스인 경우에만.

사용하는 대부분의 시간isKindOfClass:코드를 서브클래스에서도 사용할 수 있도록 합니다.

NSObject Protocol Reference에서는 이러한 방법에 대해 조금 더 설명합니다.

  • 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:인스턴스가 정확히 지정된 클래스의 경우 true입니다.-isKindOfClass:인스턴스가 정확히 지정된 클래스의 인스턴스이거나 인스턴스의 상위 중 하나가 지정된 클래스의 인스턴스일 경우 true입니다.

-isMemberOfClass:거의 사용되지 않습니다.

isKindOfClass: 수신기가 지정된 클래스의 인스턴스인지 또는 해당 클래스에서 상속된 클래스의 인스턴스인지를 나타내는 부울 값을 반환합니다.

is Member Of Class: 수신기가 특정 클래스의 인스턴스인지 여부를 나타내는 부울 값을 반환합니다.

isKindOfClass-> 객체가 해당 클래스의 인스턴스 또는 상속된 클래스의 인스턴스일 경우 YES를 반환합니다.

isMemberOfClass: 객체가 해당 클래스의 인스턴스인 경우 YES를 반환하지만, 개체에서 상속된 클래스의 인스턴스인 경우 No를 반환합니다.

jtbandes answer에서는 예시로 충분합니다.

클래스 클러스터 때문에 isMemberOfClass는 사용자가 예상하지 못한 응답을 제공할 수 있습니다.대부분의 경우 최선의 선택은 -(BOOL) conformsToProtocol:(SEL)aSelector 또는 -(BOOL) conformsToProtocol:(Protocol*)aProtocol입니다.즉, 클래스/서브클래스를 테스트하는 것보다 요구에 대응할 수 있는지 테스트하는 것이 좋습니다.

NSObject 클래스 및 프로토콜에 대한 자세한 내용은 다음 Apple 문서를 참조하십시오.

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

언급URL : https://stackoverflow.com/questions/3653929/ios-difference-between-iskindofclass-and-ismemberofclass

반응형