NSDictionary *dict = [NSDictionary dictionary];
NSLog(@\"%@\", NSStringFromClass([dict class]));
This code prints \"__NSDictionary0\".
For my
NSDictionary
is a class cluster, as Gendolkari said and Class Clusters are documented.
And, no, you can't depend on the exact identity of the private subclass.
You should certainly be able to do the following to determine if it is a dictionary or not:
[myThingaMaHoover isKindOfClass: [NSDictionary class]];
Or, at the least, that it is a dictionary as implemented as a part of the NSDictinoary
class cluster.
What you can't do is use isKindOfClass:
or isMemberOfClass:
to determine whether or not a dictionary (or string, array, or set) is mutable. Consider:
NSDictionary *d = [NSDictionary dictionaryWithObject: [[NSObject new] autorelease] forKey: @"Bob"];
NSMutableDictionary *m = [NSMutableDictionary dictionaryWithObject: [[NSObject new] autorelease] forKey: @"Bob"];
NSLog(@"d class: %@ %@ %@", [d class], [d superclass], [[d superclass] superclass]);
NSLog(@"m class: %@ %@ %@", [m class], [m superclass], [[m superclass] superclass]);
This outputs:
d class: NSCFDictionary NSMutableDictionary NSDictionary
m class: NSCFDictionary NSMutableDictionary NSDictionary
d
and m
are both instances of NSCFDictionary
which inherits from NSMutableDictionary
(which inherits from NSDictionary
).