Ich habe eine Methode, die unglaublich langsam im Gerät (iPhone3G) im Vergleich zum Simulator läuft.
Während der Simulator ungefähr 100 Ausführungen der Methode in 1 Sekunde handhaben kann, kann das Gerät nur 4 mal die Methode in einer Sekunde ausführen.
Was kann es so lächerlich machen?
CODE: Hinweis: Die Methode berechnet eine benutzerfreundliche Zeichenfolge aus zwei Daten (Startdatum und Enddatum eines Ereignisses).
%Vor%iOS-Geräte sind erheblich weniger leistungsstark als der Computer, auf dem Sie den Simulator ausführen. Der iOS-Simulator emuliert den ARM-Prozessor nicht und führt ihn daher mit voller Geschwindigkeit aus.
Darüber hinaus ist der Grund, dass diese bestimmte Methode so langsam ist, die Erstellung der Objekte NSDateFormatter
und NSCalendar
. Diese sind ziemlich teuer zu erstellen und sollten in einer Instanzvariablen / Eigenschaft zwischengespeichert werden, wenn Sie sie mehrmals verwenden möchten.
Es ist normal, dass der Simulator für INTEL-Prozessoren kompiliert wird, wenn Sie auf dem Simulator testen, dass Ihre App für INTEL gebaut wird und alle Ihre CPU-Leistung nutzt. Es ist also viel schneller.
Sie können das Instrument verwenden, um zu sehen, welcher Teil verlangsamt wird.
Vermeiden Sie die Verwendung von NSDateFormatter in der Schleife.
Ich habe es behoben, indem ich date in string mit stringWithFormat konvertiert habe und dann die Komponenten mit componentsSeparatedByString gebrochen habe.
%Vor%Dadurch konnte ich meine Schleife in weniger als einer Sekunde ausführen.
Hoffe, das wird helfen.
Das Instanisieren von NSDateFormatter und NSCalendar sind keine nicht trivialen Operationen. Das Erstellen eines NSDateFormatter kann bei einem iPhone 4s bei meinen Tests bis zu 250ms dauern. Vermeiden Sie das erneute Erstellen dieser Objekte, indem Sie sie entweder als Klassen-Ivars oder statische Objekte beibehalten, wenn dies möglich ist. Wiederverwendung wann immer Sie können.
Tags und Links ios performance ios-simulator