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)
.
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.
isKindOfClass:
gibt an, ob ein Objekt erbt von einer bestimmten KlasseisMemberOfClass:
gibt an, ob ein Objekt eine Instanz von eine bestimmte Klasse ist.[[NSMutableData data] isKindOfClass:[NSData class]]; // YES
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO
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.
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.
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.
Aufgrund von Klassenclustern kann isMemberOfClass Ihnen eine Antwort geben, die Sie möglicherweise nicht erwarten. In vielen Fällen ist Ihre beste Wahl eher BOOL) conformsToProtocol: (SEL) aSelector oder - (BOOL) conformsToProtocol: (Protocol *) aProtocol. Das heißt, es ist besser, diese zu testen, wenn sie Ihren Anforderungen entsprechen, als Klasse/Unterklasse zu testen.
Siehe Apple doc für NSObject-Klasse und -Protokoll:
--- (http://developer.Apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//Apple_ref/occ/cl/NSObject