2009-08-13 11 views
7

Ho seguente pezzo di codicenome di classe e messaggi isKindOfClass inviati a un oggetto

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); 
} 

sto ottenendo seguente output (e in attesa di come ha sottolineato)

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 

mi sto perdendo qualcosa di terribile semplice qui? Grazie!

risposta

16

Usa:

[element isMemberOfClass: [NSString class]] 
Non

:

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

NSString e NSMutableString sono implementate come un class cluster (vedi "String oggetti" nel iPhone version of the documentation).

Quindi isKindOfClass: deve restituire true ma isMemberOfClass: restituirà false poiché NSString non è il tipo esatto dell'oggetto.

+0

bella cattura :) ... grazie! – Dev

2

NSString è costituito da un gruppo di classi. Sono anche a pagamento con pedaggio gratuito con CFString s (da CoreFoundation). È molto probabile che da qualche parte nell'implementazione di NSString compaia questo NSCFString (non conosco tutti i fatti, ma la mia deduzione qui è che questa classe funge da ponte).

+0

Quindi, se vogliamo fare qualche instrospection, dovremmo controllare veramente NSCFString? – Dev

+0

, ad esempio per gli oggetti di classe NSString e NSMutableString? – Dev

Problemi correlati