Wie sie sagen Sie, diese Dinge testen müssen. Aber ... der folgende einfache Test war für mich lehrreich, um eine Vorstellung von dem relativen Geschwindigkeitsunterschied zwischen den NSMutableDictionary- und NSMutableArray-Auflistungsklassen im Falle kleiner Beispiele mit hoher Belegungsrate zu bekommen.
das folgende Programms Ausführen der Zeit war: (mit Garbage Collection on) (auf einer neuen Maschine quad core)
NSMutableDictionary 4,624478 Sekunden lang NSMutableArray 1,806365 Sekunden lang
int main (int argc, const char * argv[])
{
NSLog(@"Hello, World!");
LNCStopwatch* stopwatch = [[LNCStopwatch alloc] init];
[stopwatch start];
for (int i = 1; i< 1000000; i++)
{
NSMutableDictionary* dict = [[NSMutableDictionary alloc]init];
[dict setObject:@"a" forKey:@"a"];
[dict setObject:@"b" forKey:@"b"];
[dict setObject:@"c" forKey:@"c"];
[dict setObject:@"d" forKey:@"d"];
[dict setObject:@"e" forKey:@"e"];
[dict setObject:@"y" forKey:@"a"];
[dict setObject:@"x" forKey:@"d"];
}
[stopwatch stopAndLogTimeAndReset];
[stopwatch start];
for (int i = 1; i< 1000000; i++)
{
NSMutableArray* arr = [[NSMutableArray alloc]init];
[arr addObject:@"a"];
[arr addObject:@"b"];
[arr addObject:@"c"];
[arr addObject:@"d"];
[arr addObject:@"e"];
[arr replaceObjectAtIndex:[arr indexOfObject:@"a"] withObject:@"y"];
[arr replaceObjectAtIndex:[arr indexOfObject:@"d"] withObject:@"x"];
}
[stopwatch stopAndLogTimeAndReset];
return 0;
}
(Die absoluten Zeiten I don Ich denke, es ist wirklich alles so wichtig, es sind nur die relativen Zeiten, die für diese kleinen Klassen wichtiger sind.Für größere Klassen wird natürlich die Art der Sammelklasse dominieren, zB sollte NSMutableDictionary O (1) sein Element, etc ...)
Hallo Fraser, Ich mache ein Partikelsystem iPhone App mit möglicherweise Hunderte von Sprites auf dem Bildschirm zippen. Das Rendern erfolgt in OpenGL. Für Grinsen nutze ich KVO für jedes Partikel, um ihre Geburt/Tod zu beobachten und die App stoppte, als ich sie auf dem Gerät installierte. Das Wörterbuch/Array-Problem ist nicht mehr wirklich relevant, da KVO Overhead in diesem Fall unerschwinglich teuer ist. – dugla