Недавно я использую PHAssets, чтобы заменить старые объекты в моем проекте. Однако, когда я использую свое приложение для масштабирования некоторых изображений, я обнаружил, что он обычно сбой. Я использую режим отладки, обнаружив, что это проблема с памятью. я использую ниже код, чтобы изменить картинуПамять об использовании drawInRect для изменения размера изображения
+(UIImage*)scaleRetangleToFitLen:(UIImage *)img sWidth:(float)wid sHeight:(float)hei{
CGSize sb = img.size;;
if (img.size.height/img.size.width > hei/wid) {
sb = CGSizeMake(wid,wid*img.size.height/img.size.width);
}else{
sb = CGSizeMake(img.size.width*hei/img.size.height,hei);
}
if (sb.width > img.size.width || sb.height > img.size.height) {
sb = img.size;
}
UIImage* scaledImage = nil;
UIGraphicsBeginImageContext(sb);
[img drawInRect:CGRectMake(0,0, sb.width, sb.height)];
scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
img = nil;
return scaledImage;
}
память будет увеличиваться примерно 50М, когда код
[img drawInRect:CGRectMake(0,0, sb.width, sb.height)]
работает, и это не будет выставиться бесплатно, даже думал, что метод закончен. ширина и высота 304 * 228, размер оригинального изображения примерно 3264 * 2448, возвращенное изображение 304 * 228, это означает, что реальное изображение, которое я хотел, было всего лишь размером изображения 304 * 228, однако оно принимает 50 + M memory. Есть ли способ освободить память, которую выполняет drawInRect: функция? (@autoreleasepool не работает ~)
Спасибо за ваш ответ. Код выглядит следующим образом: (Я добавляю свой код в комментарий ниже для лучшего чтения) – AFu
верхний код в моем ответе, сейчас я пытаюсь использовать «UIImage * ti = [ pv.image.image copy]; " вместо «UIImage * ti = pv.image.image;», но это не работает; Кажется, что объект копирования и исходный объект связаны с одним и тем же изображением, если рисовать изображение, оно увеличивает память, однако исходный объект не настроен на свободный, поэтому память не будет выпущена, есть ли какое-либо решение для такая ситуация (объект UIImageView не нуждается в 35-мегабайтной версии, но я использую метод draw, беря его на 35M, после розыгрыша, как я могу установить версию 35M на маленькую) – AFu
Кажется, я не должен использовать 3264 * 2448 размер изображения, я должен сначала использовать небольшую версию, чтобы ничья не увеличилась настолько ~~ – AFu