gpt4 book ai didi

Swift - 加载 PNG 而不缓存

转载 作者:行者123 更新时间:2023-11-30 11:31:39 24 4
gpt4 key购买 nike

我正在构建一个使用一些图像的游戏,并将它们加载到 UIImageViews 中。通过一些测试,我发现加载图像时内存会增加,但从 super View 中删除 UIImageView 时内存不会减少。

示例:
- 初始内存:50mb
- 然后我在许多 UIImageViews 中加载一些图像(位于 UIView 内)
- 内存达到约 70mb
- 从 super View 中删除所有 UIImageView,然后删除 UIView
- 内存保持70mb

看起来加载的 PNG(在本例中,我使用资源来存储所有这些)保留在内存/缓存中,并且仅在应用程序关闭时“取消缓存”。

我该如何解决这个问题?当应用程序达到大约 70-80mb 时,应用程序开始变得更慢,这非常令人沮丧。

最佳答案

您可以使用此代码,它不会将图像存储在缓存中

extension UIImageView {
func downloadedFrom(url: URL, contentMode mode: UIViewContentMode = .scaleToFill) {
contentMode = mode
URLSession.shared.dataTask(with: url) { data, response, error in
guard
let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
let data = data, error == nil,
let image = UIImage(data: data)
else { return }
DispatchQueue.main.async() {
self.image = image
}
}.resume()
}
func downloadedFrom(link: String, contentMode mode: UIViewContentMode = .scaleToFill ) {
guard let url = URL(string: link) else { return }
downloadedFrom(url: url, contentMode: mode)
}
func downloadimageFrom(url: URL, contentMode mode: UIViewContentMode = .scaleToFill) {
contentMode = mode
URLSession.shared.dataTask(with: url) { data, response, error in
guard
let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
let data = data, error == nil,
let image = UIImage(data: data)
else { return }
DispatchQueue.main.async() {

self.image = image

}
}.resume()
}
func downloadimageFrom(link: String, contentMode mode: UIViewContentMode = .scaleToFill ) {
guard let url = URL(string: link) else { return }
downloadimageFrom(url: url, contentMode: mode)
}


}

关于Swift - 加载 PNG 而不缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50197043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com