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.
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.
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.
Tags und Links objective-c cocoa performance iterator fast-enumeration