Ich weiß, dass die -imageNamed: -Methode ein Cached UIImage zurückgibt, aber das Problem ist, dass meine Image-Datei in "Documents" gespeichert ist, und die -imageNamed: -Methode scheint nur das Bundle zu durchsuchen ... Ich bin momentan ( widerwillig) mit -imageWithContentsOfFile: um mein Bild von 'Dokumente' zu bekommen, aber es ist nicht das selbe ... Die Skalierung eines UIImageView mit dem resultierenden Bild ist abgehackt und unhandlich. Das gleiche UIImageView zu skalieren, das ein mit -imageNamed erstelltes Bild enthält, erscheint jedoch sehr glatt. Also noch einmal: Wie kann ich ein im Cache gespeichertes UIImage aus meinen 'Dokumenten' erhalten, wenn ich -imageNamed nicht verwenden kann:?
Sie können UIImages
selbst so wie -imageNamed:
speichern. Es lädt sie einfach und hält sie dann fest. Sie können sie auch mit einem NSDictionary
beibehalten und Ihr eigenes -imageNamed:
Aber ich mache mir mehr Sorgen wegen der Probleme, die Sie beim Skalieren haben. Wie kommen Ihre Bilder in Dokumente, wie skalieren Sie sie und haben Sie die gleiche Bilddatei getestet, die im Paket gespeichert ist? Ich bezweifle, dass -imageNamed:
damit zu tun hat. Ich vermute eher Dinge wie die Tatsache, dass das Bündel eine gewisse Komprimierung hat (obwohl ich noch keine Theorie habe, warum das in der Praxis wichtig wäre), Unterschiede in der Datei oder Unterschiede in der Art des restlichen Programms verhält sich während der Skalierung (was zu Konflikten auf der Festplatte oder der CPU führt). Caching ist unwahrscheinlich in Verbindung mit diesem Problem.
Ich würde etwas Profiling mit Instrumenten machen, um herauszufinden, woher die Häcksel kommt. Maximieren Sie die Festplatte, die CPU und den Speicher? Was ist der Flaschenhals?
Ich habe eine Erweiterung der Antwort von rpetrich gemacht und die imageName: -Methode überschrieben, um mehr von einem Ersatztropfen hinzuzufügen. Es durchsucht zuerst das Hauptpaket und dann das Cache-Verzeichnis. Sie könnten natürlich das Cache-Verzeichnis in das Dokumentenverzeichnis ändern.
%Vor% Am einfachsten wäre es, wenn ein NSMutableDictionary
die zwischengespeicherten Bilder speichert und eine Cache-Methode löscht:
Hinweis: Sie sollten +[UIImage clearCache]
von Ihrer didReceiveMemoryWarning
-Methode aufrufen. % Co_de% deaktiviert außerdem alle Objekte im Cache, nicht nur nicht verwendete Elemente. Um dies zu beheben, wäre eine clearCache
Unterklasse und ein komplizierterer Caching-Mechanismus erforderlich.