我使用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)
}
}
}
答案 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)
}
}
}