iOS: Wird [UIImage -imageNamed:] ohne Dateierweiterung zu Performance-Problemen führen?

8

Ich habe ein Bild namens [email protected] . Die Datei hat eine Größe von 1 KB. Meine App ist eine iPhone-App.

Ich lade das Bild in meiner App mit diesem Aufruf:

%Vor%

Bei der Verwendung eines E / A-Aktivitätsinstruments, das die E / A-Aktivitäten analysiert, habe ich festgestellt, dass es mehrere Aktivitäten in Bezug auf diese Datei gibt, die zu "Keine solche Datei oder Verzeichnis" -Fehler führen, und diese Aktivitäten brauchen etwas Zeit. p>

Diese Aktivitäten sind wie das Lesen dieser Dateien:

%Vor%

Und zu meiner Überraschung dauert jede fehlgeschlagene Operation länger als die, die erfolgreich war.

Wie kann ich diese Art von Leistungsproblem vermeiden?

    
CarmeloS 06.03.2013, 03:38
quelle

1 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 machen (Erraten der Erweiterung, Retina-Raten, ...) und es wird kein Memory Caching verwendet.

Achte darauf, dass duplizierter Zugriff auf ein Bild im Dateisystem bei der Verwendung meines Vorschlags sehr hart bestraft wird.

Ich empfehle nicht, imageNamed: zur 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 Speichernutzung ein Punkt ist - kein Caching bedeutet weniger Speicher.

    
Till 06.03.2013, 03:47
quelle

Tags und Links