Alamofire .dowload占用了大量内存(ios,swift)

时间:2017-07-03 07:28:54

标签: ios swift alamofire

我使用alamofire框架从服务器下载了图像。我和Alamofire.download合作过。每张图片的大小都在1MB以上 - 但是在每次请求后内存增加很多。下载4张图像后,使用的内存大小超过171MB,之后每张图像超过35MB。 下载代码是:

$font-path

目的地代码是:

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)
            }
    }
}

2 个答案:

答案 0 :(得分:2)

问题在于......

UIImage(contentsOfFile: imagePath)

特别是因为您(大概)正在下载图像的压缩格式。

但是,UIImage在内存中未压缩。因此,图像的每个像素将采用4个字节的信息(红色,绿色,蓝色,alpha)。

因此,如果您的图像是(例如)5百万像素。

然后5,000,000像素* 4b = 20MB。

所以,我想你的图像大约是10MP?

解决此问题的最佳方法是优化图像下载。如果您在iPhone上显示图像,则无需下载10MP版本的图像。您也可以将其调整为小得多。

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

答案 1 :(得分:1)

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

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)
            print("Image is successfully downloaded!")
            //self.addNewImageToTheScrollView(img: image)
        }
    }
}