Kann mir irgendjemand sagen, was der Unterschied zwischen den Funktionen isKindOfClass:(Class)aClass
und isMemberOfClass:(Class)aClass
ist?
Ich weiß, dass es etwas Kleines ist, eines ist global, während das andere eine exakte Klassenübereinstimmung ist, aber ich brauche jemanden, der angibt, welches was ist.
isKindOfClass:
gibt YES zurück, wenn der Empfänger eine Instanz der angegebenen Klasse oder eine Instanz einer Klasse ist, die von der angegebenen Klasse erbt.
isMemberOfClass:
gibt YES 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-Protokollreferenz spricht ein wenig mehr über diese Methoden.
Angenommen
%Vor%dann
%Vor% Grundsätzlich ist -isMemberOfClass:
wahr, wenn die Instanz genau der angegebenen Klasse entspricht, während -isKindOfClass:
wahr ist, wenn die Instanz genau der angegebenen Klasse angehört oder wenn einer der Vorfahren der Instanz der angegebenen Klasse angehört.
-isMemberOfClass:
wird selten verwendet.
isKindOfClass : Gibt einen booleschen Wert zurück, der angibt, ob der receiver ist eine Instanz einer gegebenen Klasse oder eine Instanz einer beliebigen Klasse die von dieser Klasse erbt.
isMemberOfClass : Gibt einen booleschen Wert zurück, der angibt, ob der receiver ist eine Instanz einer bestimmten Klasse.
isKindOfClass- & gt; Gibt YES zurück, wenn das Objekt eine Instanz dieser Klasse oder einer Instanz einer Klasse ist, die von ihr geerbt wurde.
isMemberOfClass: gibt YES zurück, wenn das Objekt eine Instanz dieser Klasse ist, aber No in case: eine Instanz einer Klasse, die von ihr geerbt wird.
Beispiel ist gut genug in jtbandes Antwort.
Aufgrund von Klassenclustern kann isMemberOfClass Ihnen eine Antwort geben, die Sie vielleicht nicht erwarten. In vielen Fällen ist Ihre beste Wahl eher - (BOOL) konform zu Protocol: (SEL) aSelector oder - (BOOL) entspricht Protocol: (Protocol *) aProtocol. Das heißt, es ist besser, diese zu testen, wenn sie Ihre Bedürfnisse erfüllen können, anstatt die Klasse / Unterklasse zu testen.
Siehe Apple doc für die NSObject-Klasse und das Protokoll:
Tags und Links class objective-c iphone hierarchy