NSDictionary
класс кластер, как сказал Gendolkari и Class Clusters are documented.
И, нет, вы не можете зависеть от точного идентификатора частного подкласса.
Вы, конечно, должны быть в состоянии выполнить следующие действия, чтобы определить, если это словарь или нет:
[myThingaMaHoover isKindOfClass: [NSDictionary class]];
Или, по крайней мере, что это словарь, как реализован как часть NSDictinoary
класса кластер.
Что вы не можете сделать, это использовать isKindOfClass:
или isMemberOfClass:
, чтобы определить, является ли словарь (или строка, массив или набор) изменчивым. Рассмотрим:
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]);
Это выводит:
d class: NSCFDictionary NSMutableDictionary NSDictionary
m class: NSCFDictionary NSMutableDictionary NSDictionary
d
и m
оба являются экземплярами NSCFDictionary
, который наследует от NSMutableDictionary
(который наследует от NSDictionary
).
Хороший ответ. И если следующий вопрос: «Я пытаюсь определить, является ли словарь изменчивым или нет», тогда ... нет ... вы тоже не можете этого сделать. – bbum
Не могли бы вы использовать 'isMemberOfClass: [NSMutableDictionary class]' для этого? – GendoIkari
Yep, isMemberOfClass: может использоваться, чтобы определить, является ли словарь изменчивым или нет. – JustSid