it-swarm.com.de

iOS Unterschied zwischen isKindOfClass und isMemberOfClass

Was ist der Unterschied zwischen den Funktionen isKindOfClass:(Class)aClass und isMemberOfClass:(Class)aClass? Ich weiß, dass es so etwas wie ein kleines ist, eines ist global, während das andere eine genaue Klassenübereinstimmung ist, aber ich brauche jemanden, der angibt, welches welches bitte ist.

In Swift isKind(of aClass: AnyClass) und isMember(of aClass: AnyClass).

146
NoodleOfDeath

isKindOfClass: Gibt YES zurück, wenn der Empfänger eine Instanz der angegebenen Klasse oder eine Instanz ist einer Klasse, die von der angegebenen Klasse erbt .

isMemberOfClass: Gibt YES nur dann zurück, wenn der Empfänger eine Instanz der angegebenen Klasse ist.

In den meisten Fällen möchten Sie isKindOfClass: Verwenden, um sicherzustellen, dass Ihr Code auch mit Unterklassen funktioniert.

Die NSObject Protocol Reference behandelt diese Methoden etwas genauer.

257
Sebastian Celis
  • isKindOfClass: gibt an, ob ein Objekt erbt von einer bestimmten Klasse
  • isMemberOfClass: gibt an, ob ein Objekt eine Instanz von eine bestimmte Klasse ist.

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

Annehmen

@interface A : NSObject 
@end

@interface B : A
@end

...

id b = [[B alloc] init];

dann

[b isKindOfClass:[A class]] == YES;
[b isMemberOfClass:[A class]] == NO;

Grundsätzlich gilt, -isMemberOfClass: ist wahr, wenn die Instanz genau der angegebenen Klasse entspricht, während -isKindOfClass: ist true, wenn die Instanz genau der angegebenen Klasse entspricht oder wenn einer der Vorfahren der Instanz der angegebenen Klasse entspricht.

-isMemberOfClass: wird selten verwendet.

48
kennytm

isKindOfClass: Gibt einen booleschen Wert zurück, der angibt, ob der Empfänger eine Instanz einer bestimmten Klasse oder eine Instanz einer Klasse ist, die erbt aus dieser Klasse.

isMemberOfClass: Gibt einen Booleschen Wert zurück, der angibt, ob der Empfänger eine Instanz einer bestimmten Klasse ist.

9
Alex Terente

isKindOfClass-> gibt YES zurück, wenn das Objekt eine Instanz dieser Klasse oder eine Instanz einer Klasse ist, die von ihr geerbt wird.

isMemberOfClass: Gibt JA zurück, wenn das Objekt eine Instanz dieser Klasse ist, aber Nein, falls: Instanz einer Klasse, die von dieser Klasse geerbt wird.

beispiel ist gut genug in jtbandes Antwort.

2
Ishu
0
Art Swri