2017-07-03 56 views
2

我使用alamofire框架从服务器下载图像。我与Alamofire.download合作。每张图片的大小都超过1MB + - ,但每次请求后内存都会增加很多。下载4张图像后,使用的内存高于171MB,之后每幅图像的大小超过35MB。 下载代码:Alamofire .dowload需要大量内存(ios,swift)

Alamofire.download(mainReguest, to: self.destination) 
     .downloadProgress{ progress in 
      self.progressView.progress = Float(progress.fractionCompleted) 
     } 

     .response{ response in 
      if response.error == nil, let imagePath = response.destinationURL?.path { 
       let image = UIImage(contentsOfFile: imagePath) 
       self.addNewImageToTheScrollView(img: image) 
      } 
    } 
} 

代码的目的地是:

let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory, 
                   in: .userDomainMask, 
                   with: [DownloadRequest.DownloadOptions.removePreviousFile]) 
+0

https://stackoverflow.com/questions/38889134/swift-download-image-from-internet-and-cache-them-doesnt-work-properly-need-s/38890731#38890731 –

+0

尝试此链接并让我知道你是否有任何困惑..! –

+0

下载图片的尺寸是多少? – user3581248

回答

2

问题是这... ...

UIImage(contentsOfFile: imagePath) 

具体与您的下载图像的压缩格式的事实,你是(大概)。

但是,UIImage在内存中未压缩。因此,您的图像的每个像素将需要4个字节的信息(红色,绿色,蓝色,阿尔法)。

所以,如果你有一个图像是(例如)500万像素。

然后500万像素* 4b = 20MB。

所以,我想你的图像是在10MP左右?

解决此问题的最佳方法是优化图像下载。如果你在iPhone上显示图像,那么下载它的10MP版本没有意义。你可能会调整它的大小。

理想情况下,您应该在发生下载之前在后端调整图像大小。

+0

y,这是一个问题。谢谢 – sergs

1

你Alamofire的代码就可以了。例如,由于图像分辨率高,很可能您在UI部分的某处出现问题。你必须做的第一件事是本地化一个问题。要检查网络代码,请评论所有与UI相关的代码并再次运行您的应用程序。

​​
+0

是的,问题出在UI部分 – sergs

+0

func addNewImageToTheScrollView(img:UIImage?)如果让imageResponse = img ImageView = UIImageView(image:imageResponse.crop(rect:CGRect(x:0,y:imageResponse) size.height/2,width:self.contentView.frame.width,height:140))) self.contentView.addSubview(imageView) – sergs

+0

这里是增加内存self.contentView.addSubview(imageView)和我的代码不知道该怎么做who – sergs