[beliebige Anzahl] von Bildern ist nicht wirklich ein Problem auf iOS, da es erweiterte Caching-Systeme gibt, die für die Wiederverwendung der Bilder sorgen. Auch das Rendering-System von iOS ist ziemlich gut, so dass Sie sich keine Sorgen machen müssen.
Während es sicherlich möglich ist, das System für Sprites zu programmieren, würde ich dir nicht raten, es zu tun. Diese Methode wird hauptsächlich in der Webentwicklung verwendet (weil jedes Bild mit einer neuen Anfrage * Note no longer true with HTTP/2) geliefert werden muss und natürlich auch für die Spieleentwicklung (weil die weniger bindenden Texturaufrufe die bessere haben).
Es gibt noch ein gutes Beispiel dafür, warum Sprites nicht verwendet werden sollten - wenn Sie die Watch-Anwendung entwickeln und Animationen erstellen möchten, tun Sie dies über Flipboard-Style-Bilder (Bilderfolge 1.png - 100.png) und nicht mit einem großen Atlas von Bildern. Während es raten würde, warum sie sich dafür entschieden haben, es so zu machen (meine Annahme wäre wegen, wie gut es intern + Durchsatz des Bluetooth funktioniert), ist es offensichtlich, dass es auch bevorzugte Wahl von Apple ist und so sollten wir folgen .
Für iOS gibt es einige Fallen, die Sie wissen sollten:
- Jede aus dem Web geladen Bild sollte nicht auf Hauptthread geladen werden, das gleiche gilt wirklich mit jedem Bild, das an der Last nicht vorhanden ist des Bildschirms (Bilder in UITableViewCell sind ein gutes Beispiel, weil Sie Mini-Freezes sehen können, wenn die Bilder groß sind, wie Sie durch scrollen)
- Wenn Sie viele Ebenen haben, Bilder mit Alpha-Kanal! = 1 Leistung stark verringern (aber sind oft unvermeidbar)
- Hintergrundbild erstellt mit
UIColor.colorWithPatternImage()
sollte b e mit Vorsicht verwendet werden, da diese Methode als problematisch angesehen wird (details here)
Jetzt als für asynchronen Laden der Bilder, empfehle ich Sie in der folgenden Bibliotheken einen Blick:
Beide sind groß, so dass es wirklich Frage der Präferenz ist (wie ich Haneke bett er), aber Sie können Bilder auf verschiedenen Threads herunterladen, sei es aus dem Web oder aus Ihrem Bundle. Sie haben auch Erweiterungen für UIImageView, mit denen Sie 1-Linien-Funktion verwenden können, um alle Bilder einfach zu laden.
Hoffe es hilft!
100 100x100 Bilder nicht so viel Speicher. Vorausgesetzt, alle sind geladen, sind das (100 * 100 * 100 * 4) Bytes Speicher bei der Decodierung, was nur 4 MB ist. UIKit wird die Deduplizierung Ihrer Ressourcen übernehmen und sie auch in Umgebungen mit wenig Arbeitsspeicher zwischenspeichern und freigeben. Daher denke ich, dass dies nur eine vorzeitige Optimierung ist. –
Richard hat recht, dass die Menge an Speicher nicht so schlecht ist, aber wenn du es wirklich brauchst, könntest du diese Bilder in ein einzelnes Sprite verwandeln und dann mit Coords aufrufen. Ich habe diese Seite schon vorher für CSS Sprite verwendet http://spritegen.website-performance.org – Cole
@Cole, das ist nicht gut für die Leistung auf iOS - die Gewinne, die Sie für Cache-Lokalität erhalten, sind minimal, und wie ich zuvor erwähnt UIKit führt einige fortgeschrittene Caching-Techniken durch, um sicherzustellen, dass nur verwendete Bilder zu jeder Zeit im Speicher bleiben. Auch Bilder über 1024x1024 schneiden auf älteren Geräten sehr schlecht ab (aufgrund eines Hardware-Limits im Texturpuffer müssen die Bilder von UIKit gekachelt werden). –