web-dev-qa-db-ja.com

isKindOfClassとisMemberOfClassのiOSの違い

isKindOfClass:(Class)aClass関数とisMemberOfClass:(Class)aClass関数の違いは何ですか? 1つはグローバルで、もう1つはクラスに完全に一致するような小さなものであることは知っていますが、どちらを喜ばせるかを指定する必要があります。

In Swift isKind(of aClass: AnyClass)およびisMember(of aClass: AnyClass)

146
NoodleOfDeath

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

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

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

NSObject Protocol Reference は、これらのメソッドについてもう少し詳しく説明しています。

257
Sebastian Celis
  • isKindOfClass:は、オブジェクトが継承であるかどうかを示します
  • isMemberOfClass:は、オブジェクトのインスタンス指定されたクラスであるかどうかを示します。

[[NSMutableData data] isKindOfClass:[NSData class]]; // YES
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO
79
jtbandes

仮に

@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:はほとんど使用されません。

48
kennytm

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

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

9
Alex Terente

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

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

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

2
Ishu
0
Art Swri