iPhone SDK-Unterschied zwischen isKindOfClass und isMemberOfClass

134

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.

    
Noodle of Death 06.09.2010, 19:38
quelle

6 Antworten

239

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.

    
Sebastian Celis 06.09.2010, 19:43
quelle
73
  • isKindOfClass: gibt an, ob ein Objekt von einer bestimmten Klasse
  • erbt
  • isMemberOfClass: gibt an, ob ein Objekt eine Instanz von einer bestimmten Klasse ist.
%Vor%     
jtbandes 27.07.2011 07:32
quelle
44

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.

    
kennytm 06.09.2010 19:43
quelle
9
  

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.

    
Alex Terente 27.07.2011 07:36
quelle
3

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.

    
Ishu 27.07.2011 07:41
quelle
0

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:

Ссылка

Ссылка

    
Art Swri 10.01.2012 22:03
quelle