Warum ist NSFastEnumeration schnell?

8

Weiß jemand, ob NSFastEnumeration ist wirklich schneller (als in Laufzeit Leistung) als mit NSEnumerator oder (für Arrays) mit einem Integer-Zähler und Schleife durch die Elemente?

Wenn es tatsächlich schneller ist, wie erreicht es diese Geschwindigkeit?

Oder vielleicht bezieht sich die "schnelle" tatsächlich auf schneller in schreiben den Iterationscode?

Vielen Dank im Voraus.

    
adib 09.12.2011, 08:36
quelle

2 Antworten

6

Abhängig vom Container ist NSFastEnumeration mindestens so schnell wie NSEnumerator , aber normalerweise viel schneller, da weniger Methodenaufrufe erforderlich sind.

Statt nextObject für jedes Element im Array aufrufen zu müssen, kann das Array mit NSFastEnumerator gleichzeitig einen Block von Objekten in einem C-Array zurückgeben. Iterieren dieses C-Array ist Weg schneller als viele Methodenaufrufe zu tun, die jeweils nachschlagen und nur ein Objekt zurückgeben.

    
DarkDust 09.12.2011, 08:45
quelle
5

Fast enumeration ist nicht schneller als jede "for" -Schleife. In einem allgemeinen Sinn ist das unmöglich, weil Grundschleifen bereits so optimiert sind wie sie sein können.

Stattdessen ist fast enumeration schneller als eine "for" - oder "while" -Schleife, die Daten bei jeder Iteration von einem Objective-C-Objekt mithilfe eines Objective-C-Methodenaufrufs abruft.

Dadurch werden die Daten stapelweise abgerufen, wodurch der Aufwand für den Aufruf einer Methode bei jeder Iteration reduziert wird. Das Entfernen des Methodenaufrufs aus dem inneren Teil der Schleife hat auch Vorteile bei der Compiler-Optimierung.

    
Parag Bafna 09.12.2011 08:47
quelle