2009-08-13 4 views
7

Ich habe folgende Stück Codeclassname und isKindOfClass Nachrichten an ein Objekt gesendet

NSMutableArray *mutArray = [[NSMutableArray alloc] init]; 
[mutArray addObject: [NSProcessInfo processInfo]]; 
[mutArray addObject: @"This is NSString Object"]; 
[mutArray addObject: [[NSMutableString alloc] initWithString: @"1st Mutable String"]]; 

for (id element in mutArray){ 
     NSLog(@" "); 
     NSLog(@"Class Name: %@", [element className]); 
     NSLog(@"Is Member of NSString: %@", ([element class] isMemberOfClass: [NSString class]) ? YES: NO); 
     NSLog(@"Is kind of NSString: %@", ([element class] isKindOfClass: [NSString class]) ? YES: NO); 
} 

erhalte ich folgende Ausgabe (und erwarten als spitze)

Class Name: NSProcessInfo 
Is Member of NSString: NO 
Is Kind of NSString: NO 

Class Name: NSCFString   <-- Expecting NSString 
Is Member of NSString: NO  <-- Expecting YES 
Is Kind of NSString: NO  <-- Expecting YES 

Class Name: NSCFString   <-- Expecting NSMutableString 
Is Member of NSString: NO  
Is Kind of NSString: NO  <-- Expecting YES 

Bin ich einfach etwas Schreckliches hier fehlt? Vielen Dank!

Antwort

16

Verwendung:

[element isMemberOfClass: [NSString class]] 

Nicht:

[[element class] isMemberOfClass: [NSString class]] 

NSString und NSMutableString implementiert werden als class cluster (siehe "String-Objekte" in der iPhone version of the documentation).

So isKindOfClass: sollte True zurückgeben aber IsMemberOfClass: wird false zurückgeben, da NSString nicht der genaue Typ des Objekts ist.

+0

schöner Fang :) ... danke! – Dev

2

NSString besteht aus einem Cluster von Klassen. Sie sind auch gebührenfrei mit CFString s (von CoreFoundation) überbrückt. Es ist sehr wahrscheinlich irgendwo in der Implementierung von NSString diese NSCFString erscheint (ich weiß nicht alle Fakten, aber meine Schlussfolgerung hier ist diese Klasse fungiert als die Brücke).

+0

Also, wenn wir irgendeine Inspektion machen wollen, sollten wir wirklich gegen NSCFString überprüfen? – Dev

+0

, d. H. Für NSString- und NSMutableString-Klassenobjekte? – Dev

Verwandte Themen