UIImage к сырым NSData / избежать сжатия

У меня есть свой собственный класс загрузчика изображений, он содержит очередь и загружает изображения по одному (или определенному количеству) за раз, записывает их в папку кэша и извлекает их из папки кэша, когда это необходимо. У меня также есть подкласс UIImageView, к которому я могу передать URL-адрес, через класс загрузчика изображений он будет смотреть, существует ли изображение на устройстве, и покажет его, если он есть, или загрузит и покажет его после его завершения.

После завершения загрузки изображения я делаю следующее. Я создаю UIImage из загруженного NSData, сохраняю загруженный NSData на диск и возвращаю UIImage.

// This is executed in a background thread
downloadedImage = [UIImage imageWithData:downloadedData];
BOOL saved = [fileManager createFileAtPath:filePath contents:downloadedData attributes:attributes];
// Send downloadedImage to the main thread and do something with it

Чтобы восстановить существующее изображение, я делаю это.

// This is executed in a background thread
if ([fileManager fileExistsAtPath:filePath])
{
    NSData* imageData = [fileManager contentsAtPath:filePath];
    retrievedImage = [UIImage imageWithData:imageData];
    // Send retrievedImage to the main thread and do something with it
}

Как вы можете видеть, я всегда создаю UIImage непосредственно из загруженного NSData, я никогда не создаю NSData с использованием UIImagePNGRepresentation, поэтому изображение никогда не сжимается. Когда вы создаете UIImage из сжатых NSData, UIImage распаковывает его прямо перед рендерингом в основном потоке и, таким образом, блокирует UI. Поскольку теперь у меня есть UITableView с тонной маленьких изображений, которые нужно загружать или извлекать с диска, это было бы неприемлемо, поскольку это сильно замедлило бы мою прокрутку.

Теперь моя проблема. Пользователь также может выбрать фотографию из камеры, сохранить ее, и она также должна появиться в моем UITableView. Но я не могу найти способ превратить UIImage из камеры в NSData без использования UIImagePNGRepresentation. Итак, вот мой вопрос.

Как я могу преобразовать UIImage в несжатый NSData, чтобы я мог преобразовать его обратно в UIImage позже, используя imageWithData, чтобы его не нужно было распаковывать перед рендерингом?

или же

Можно ли каким-либо образом выполнить декомпрессию перед отправкой UIImage в основной поток и кэшировать его, чтобы его можно было распаковать только один раз?

Заранее спасибо.

Ответы на вопрос(3)

Ваш ответ на вопрос