2017-02-21 5 views
1

Я пытаюсь сжать и получить от NSData между 20 и 30 UIImages с «для цикла», как это:UIImageJPEGRepresentation используя большой объем памяти (Swift 3.0)

for theImage in selectedUIImages { 

let data = UIImageJPEGRepresentation(image,0.5) 
// doing something with the data 

} 

Пытались на iPhone 7 без проблем, кроме моего приложения не используя Шифрование до 700Мб памяти при переходе через петлю, но на старом iPhone, я получаю сообщение:

*Message from debugger: Terminated due to memory issue.* 

основной целью является, чтобы получить NSData от UIImage, так что я могу поставить изображение в каталоге для загрузки. Поясню:

утилита Transfer Amazon S3 хочет путь/URL к изображению, и поэтому мне нужно, чтобы сделать путь/URL для UIImage, и единственный способ я знаю, чтобы получить его:

data.write(to: URL(fileURLWithPath: localPath), options: .atomic) 
+0

Вы попробовали устройство? – Priyal

+0

Возможный дубликат http://stackoverflow.com/questions/25248294/uiimagejpegrepresentation-received-memory-warning. –

+0

Priyal: Что вы имеете в виду? – fayyaz

ответ

0

Поскольку у вашего приложения заканчивается память. Вы можете сохранить его в каталоге документов после сжатия, а затем загрузить его на сервер один за другим. Так что это не проблема вашей памяти.

+0

Итак, было бы лучше сначала сжать и загрузить. Итак, в основном 1. for-loop, который сжимает, а затем другой, который загружается? – fayyaz

0

Вы можете уменьшить размер изображения, уменьшив параметр отношения. Вы можете использовать 0,3 вместо 0,5.

for theImage in selectedUIImages { 

let data = UIImageJPEGRepresentation(image,0.3) 
// doing something with the data 

} 
+0

такая же ошибка, как и раньше :( * Сообщение от отладчика: завершено из-за проблемы с памятью. * – fayyaz

+0

@fayyaz. Вы будете получать это сообщение, потому что у вас нет контроля над количеством изображений в выбранном массивеUIImages. Он может работать для числа изображений и начать сбой только на одном изображении. – NSNoob

0

Попробуйте использовать autorelease бассейн:

autoreleasepool { 
    for theImage in selectedUIImages { 

     let data = UIImageJPEGRepresentation(image,0.5) 
     // doing something with the data 

    } 
} 

и переместить его в фоновом потоке.

+0

не было бы лучше иметь autoreleasepool внутри цикла? – simonWasHere

Смежные вопросы