NSDictionary
jest klaster klasy, jak Gendolkari powiedział i Class Clusters are documented.
I, nie, nie można polegać na dokładnej tożsamości prywatnej podklasy.
należy z pewnością będzie w stanie wykonać następujące czynności, aby ustalić, czy jest to słownik czy nie:
[myThingaMaHoover isKindOfClass: [NSDictionary class]];
lub, co najmniej, że jest to słownik jak realizowany jako część klasy NSDictinoary
grupa.
Nie można użyć funkcji isKindOfClass:
lub isMemberOfClass:
w celu określenia, czy słownik (lub ciąg, tablica lub zestaw) może być modyfikowany. Rozważyć:
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]);
wyjścia to, że:
d class: NSCFDictionary NSMutableDictionary NSDictionary
m class: NSCFDictionary NSMutableDictionary NSDictionary
d
i m
są zarówno przypadki NSCFDictionary
która dziedziczy NSMutableDictionary
(która dziedziczy NSDictionary
).
Dobra odpowiedź. A jeśli następne pytanie brzmi "Próbuję ustalić, czy słownik jest zmienny czy nie", to ... nie ... nie możesz tego zrobić. – bbum
Nie można użyć do tego opcji "isMemberOfClass: [NSMutableDictionary class]"? – GendoIkari
Tak, isMemberOfClass: można użyć do określenia, czy słownik jest zmienny czy nie. – JustSid