Как найти UIImage Узкое место
У меня есть приложение, которое используетUIImage
объекты. До этого момента я использовал объекты изображения, инициализированные с помощью чего-то вроде этого:
UIImage *image = [UIImage imageNamed:imageName];
используя изображение в моем приложении. Я добавил функциональность, чтобы пользователи могли использовать изображения с камеры или из своей библиотеки, используяUIImagePickerController
, Эти изображения, очевидно, не могут быть в моем комплекте приложений, поэтому я инициализируюUIImage
возразить по-другому:
UIImage *image = [UIImage imageWithContentsOfFile:pathToFile];
Это делается после первого изменения размера изображения до размера, аналогичного другим файлам в моем комплекте приложений, как в пиксельных измерениях, так и в общем количестве байтов, с использованием формата Jpeg (интересно, что PNG был намного медленнее, даже для файла того же размера). Другими словами, файл, на который указываетpathToFile
это файл такого же размера, что и изображение в пакете (размеры в пикселях совпадают, сжатие выбрано, поэтому количество байтов было одинаковым).
Приложение проходит цикл создания маленьких кусочков из исходного изображения, помимо прочего, которые не имеют отношения к этому посту. Моя проблема в том, что прохождение цикла с использованием изображения, созданного вторым способом, занимает гораздо больше времени, чем использование изображения, созданного первым способом.
Я понимаю, что первый метод кэширует изображение, но я не думаю, что это актуально, если только я не понимаю, как работает кэширование. Если это релевантный фактор, как я могу добавить кэширование ко второму методу?
Соответствующая часть кода, которая вызывает узкое место, такова:
[image drawInRect:self.imageSquare];
Здесь self является подклассом UIImageView. Его свойство imageSquare простоCGRect
определяя, что будет нарисовано. Эта часть одинакова для обоих методов. Итак, почему второй метод намного медленнее с аналогичным размеромUIImage
объект?
Есть ли что-то, что я мог бы сделать по-другому, чтобы оптимизировать этот процесс?
РЕДАКТИРОВАТЬ: я изменить доступ к изображению в комплекте наimageWithContentsOfFile
и время выполнения цикла изменилось с примерно 4 секунд до чуть более минуты. Похоже, мне нужно найти способ сделать кешированиеimageNamed
делает, но с не связанными файлами.