158

isKindOfClass:(Class)aClass関数と関数はどう違いisMemberOfClass:(Class)aClassますか?1つはグローバルで、もう1つは完全に一致するクラスですが、どちらがどちらであるかを指定する必要があります。

SwiftisKind(of aClass: AnyClass)isMember(of aClass: AnyClass).

4

6 に答える 6

274

isKindOfClass:YESレシーバー指定されたクラスのインスタンスであるか、または指定されたクラスを継承する任意のクラスのインスタンスであるかを返します。

isMemberOfClass:YESレシーバーが指定されたクラスのインスタンスである場合にのみ、を返します。

ほとんどの場合isKindOfClass:、コードがサブクラスでも機能することを確認するために使用します。

NSObject プロトコル リファレンスでは、これらのメソッドについてもう少し詳しく説明しています。

于 2010-09-06T19:43:28.897 に答える
84
  • isKindOfClass:オブジェクトが特定のクラスから継承するかどうかを示します
  • isMemberOfClass:オブジェクトが特定のクラスのインスタンスであるかどうかを示します。

[[NSMutableData data] isKindOfClass:[NSData class]]; // YES
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO
于 2011-07-27T07:32:35.840 に答える
48

仮定する

@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:と正確に一致する場合、またはインスタンスの祖先の 1 つが指定されたクラスである場合は true です。

-isMemberOfClass:めったに使用されません。

于 2010-09-06T19:43:36.510 に答える
9

isKindOfClass:レシーバーが特定のクラスのインスタンスであるか、そのクラスから継承するクラスのインスタンスであるかを示すブール値を返します。

isMemberOfClass:レシーバーが特定のクラスのインスタンスであるかどうかを示すブール値を返します。

于 2011-07-27T07:36:22.220 に答える
2

isKindOfClass-> オブジェクトがそのクラスのインスタンスまたはそれから継承されたクラスのインスタンスである場合に YES を返します。

isMemberOfClass: オブジェクトがそのクラスのインスタンスである場合は YES を返しますが、継承されたクラスのインスタンスである場合は No を返します。

例はjtbandesの回答で十分です。

于 2011-07-27T07:41:05.680 に答える
0

クラスクラスターがあるため、isMemberOfClassは予期しない答えを与える可能性があります。多くの場合、最良の選択は-(BOOL)conformsToProtocol:(SEL)aSelectorまたは-(BOOL)conformsToProtocol:(Protocol *)aProtocolである可能性が高くなります。つまり、クラス/サブクラスをテストするよりも、ニーズに答えられる場合はこれらをテストする方が適切です。

NSObjectのクラスとプロトコルについては、アップルのドキュメントを参照してください。

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

于 2012-01-10T22:03:01.697 に答える