In meiner App muss ich große JPEG-Bilder laden und sie in einer Bildlaufansicht anzeigen. Um die Benutzeroberfläche ansprechbar zu halten, entschied ich mich, die Bilder im Hintergrund zu laden und sie dann im Hauptthread anzuzeigen. Um sie vollständig in den Hintergrund zu laden, zwinge ich jedes Bild dazu, dekomprimiert zu werden. Ich war mit diesem Code ein Bild zu dekomprimieren (beachte, dass meine App nur iOS 7 ist, also verstehe ich, dass die Verwendung dieser Methoden in einem Hintergrundthread OK ist):
%Vor%Allerdings hatte ich immer noch lange Ladezeiten, UI-Stottern und viel Speicherdruck. Ich habe gerade eine andere Lösung gefunden:
%Vor%Dieser Code ist um Größenordnungen besser. Das Bild wird fast sofort geladen, es gibt kein UI-Stottern und die Speicherauslastung ist stark zurückgegangen.
Also meine Frage ist zweifach:
Ich gehe davon aus, dass Sie dies auf einem Retina-Gerät ausführen. In UIGraphicsBeginImageContextWithOptions
haben Sie nach der Standardskalierung gefragt, also der Skalierung des Hauptbildschirms (2). Dies bedeutet, dass die Bitmap 4x größer wird. In der zweiten Funktion zeichnen Sie mit einem Maßstab von 1:
Übergeben Sie eine Skala von 1 bis UIGraphicsBeginImageContextWithOptions
und sehen Sie, ob Ihre Leistung ähnlich ist.
Tags und Links objective-c ios performance uiimage