2013-03-06 17 views
8

Ich habe ein Bild mit dem Namen [email protected]. Die Datei ist 1 KB groß. Meine App ist eine iPhone-App.iOS: verwendet [UIImage -imageNamed:] ohne Dateierweiterung Leistungsproblem?

lade ich das Bild in meiner app mit diesem Aufruf:

[UIImage imageNamed:@"image"]; 

Wenn Aktivität Instrument I/O, um die E/A-Aktivitäten zu analysieren, fand ich, dass es im Zusammenhang mehr Aktivitäten zu dieser Datei, die zur Folge "Keine solche Datei oder Verzeichnis" Fehler, und diese Aktivitäten brauchen einige Zeit.

diese Aktivitäten sind wie diese Dateien zu lesen:

[email protected]~iphone.png 
[email protected]~iphone.png 
[email protected] (this one doesn't fail) 

Und zu meiner Überraschung, alle fehlgeschlagenen Operationen mehr Zeit in Anspruch nehmen als derjenige gelungen.

Wie kann ich diese Art von Leistungsproblem vermeiden?

+0

etwas verwandt - http://stackoverflow.com/questions/7599030/uiimage-imagenamed-extension – Krishnabhadra

+0

@CarmeloS. habe die Antwort für "ohne Dateierweiterung Ursache Leistungsproblem?" ? –

+0

@Rajapandian die ausgewählte Antwort sehen:) – CarmeloS

Antwort

5

Wenn Sie einen umfangreichen Dateisystemzugriff verhindern möchten, verwenden Sie nicht [UIImage imageNamed:], sondern [UIImage imageWithContentsOfFile:].

Letzteres wird keine automatische Auswahl des Bildes (Erraten der Erweiterung, Retina-Raten, ...) und es wird kein Memory-Caching verwenden.

Stellen Sie sicher, dass Sie darauf achten, dass ein doppelter Zugriff auf ein Bild im Dateisystem bei Verwendung meines Vorschlags sehr hart bestraft wird.

Ich empfehle nicht, imageNamed: für die Verbesserung der Leistung einer App zu verwenden. Normalerweise ist das Gegenteil der Fall und das Laden von Bildern wird bei Verwendung dieser Methode optimiert (Caching). Wenn Sie jedoch sicher sind, dass ein bestimmtes Bild nicht erneut geladen wird, und um übermäßige Dateisystem-Lookups zu verhindern, verwenden Sie imageWithContentsOfFile:. Außerdem ist es empfehlenswert, imageWithContentsOfFile: zu verwenden, wenn die Speicherauslastung ein Punkt ist - kein Caching bedeutet weniger Speicher.

+0

Wenn letzterer kein Caching oder irgendwelche Optimierungen durchführt, sollte Dwayne "imageNamed" verwenden, so wie er es schon macht? –

+0

Oh, ich glaube nicht, OP wollen vermeiden, dass die Erweiterung raten, was er will, ist das Leistungsproblem zu vermeiden. Auch das Image-Caching ist ein sehr wichtiges Feature, das sich positiv auf die Performance auswirkt. Ich denke nicht, dass dies die Frage beantwortet. – Krishnabhadra

+0

Caching verbessert nur die Leistung für Cache-Treffer. Ich ging also davon aus, dass das OP Missgeschicke verhindern könnte. – Till

Verwandte Themen