Jak znaleźć wąskie gardło UIImage

Mam aplikację, która używaUIImage przedmioty. Do tej pory korzystałem z obiektów obrazów zainicjowanych przy użyciu czegoś takiego:

UIImage *image = [UIImage imageNamed:imageName];

używając obrazu w moim pakiecie aplikacji. Dodałem funkcjonalność umożliwiającą użytkownikom korzystanie z obrazów z aparatu lub ich biblioteki za pomocąUIImagePickerController. Te obrazy, oczywiście, nie mogą znajdować się w moim pakiecie aplikacji, więc inicjalizujęUIImage obiekt inaczej:

UIImage *image = [UIImage imageWithContentsOfFile:pathToFile];

Odbywa się to po pierwszym zmianie rozmiaru obrazu do rozmiaru podobnego do innych plików w moim pakiecie aplikacji, zarówno w wymiarze piksela, jak i całkowitych bajtów, oba przy użyciu formatu Jpeg (co ciekawe, PNG był znacznie wolniejszy, nawet dla tego samego rozmiaru pliku). Innymi słowy, plik wskazywany przezpathToFile to plik o podobnej wielkości co obraz w pakiecie (wymiary pikseli są zgodne, a kompresja została wybrana, aby liczba bajtów była podobna).

Aplikacja przechodzi przez pętlę robiąc małe kawałki z oryginalnego obrazu, między innymi rzeczy, które nie są istotne dla tego postu. Moim problemem jest to, że przejście przez pętlę za pomocą obrazu utworzonego w drugą stronę zajmuje znacznie więcej czasu niż użycie obrazu utworzonego w pierwszy sposób.

Zdaję sobie sprawę, że pierwsza metoda buforuje obraz, ale nie sądzę, że jest to istotne, chyba że nie rozumiem, jak działa buforowanie. Jeśli jest to istotny czynnik, jak mogę dodać buforowanie do drugiej metody?

Odpowiednia część kodu powodująca wąskie gardło to:

[image drawInRect:self.imageSquare];

Tutaj self jest podklasą UIImageView. Jego właściwość imageSquare jest po prostu aCGRect definiowanie tego, co zostanie narysowane. Ta część jest taka sama dla obu metod. Dlaczego więc druga metoda jest o wiele wolniejsza z podobną wielkościąUIImage obiekt?

Czy mogę coś zrobić inaczej, aby zoptymalizować ten proces?

EDYCJA: Zmieniam dostęp do obrazu w pakiecie naimageWithContentsOfFile a czas wykonania pętli zmienił się z około 4 sekund na nieco ponad minutę. Wygląda więc na to, że muszę znaleźć sposób na buforowanieimageNamed robi, ale z plikami niezwiązanymi z pakietem.

questionAnswers(1)

yourAnswerToTheQuestion