2017-07-03 94 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