2009-08-13 13 views
7

Mam następujący fragment koduclassName i wiadomości isKindOfClass wysyłane do obiektu

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

otrzymuję następujący wynik (i oczekując jak wskazano)

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 

jestem brakuje czegoś strasznego proste tutaj? Dzięki!

Odpowiedz

16

Zastosowanie:

[element isMemberOfClass: [NSString class]] 

Nie:

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

NSString i NSMutableString są implementowane jako class cluster (patrz "obiekty string" w iPhone version of the documentation).

Tak jestKindOfClass: powinien zwracać wartość true, ale isMemberOfClass: zwróci wartość false, ponieważ NSString nie jest dokładnym typem obiektu.

+0

miły połów :) ... dzięki! – Dev

2

NSString składa się z grupy klas. Są one również wolne od opłat - mostkowane z CFString s (od CoreFoundation). Jest bardzo prawdopodobne, że gdzieś w implementacji NSString pojawi się ten NSCFString (nie znam wszystkich faktów, ale moim wnioskiem tutaj jest ta klasa działająca jako most).

+0

Więc jeśli chcemy zrobić jakąkolwiek instrospekcję, czy powinniśmy naprawdę sprawdzać przy NSCFString? – Dev

+0

tj. Dla obiektów klas NSString i NSMutableString? – Dev

Powiązane problemy