gpt4 book ai didi

ios - 翠鸟中奇怪的 RAM 行为

转载 作者:行者123 更新时间:2023-11-28 06:18:28 25 4
gpt4 key购买 nike

我使用 Kingfisher 将图像加载到 Card View (UIView) 中,就像在 tinder 中一样,我将 Kingfisher 设置为将图像缓存到磁盘,但是在卡片分页期间,内存消耗从 39 兆字节急剧增加到 247,一段时间后又变成 39,但问题是当内存被释放时,第二个 UI 的应用程序变慢(我认为这是被主线程阻塞)。这个问题类似于this one.我该如何解决?

我在 didFinishLaunchingWithOptions 中的 AppDelegate 中设置了 Kingfisher 的设置

fileprivate func setupKingfisherSettings() {
let megabytes: UInt = 300
ImageCache.default.maxDiskCacheSize = megabytes * 1024 * 1024
ImageCache.default.maxMemoryCost = 1
}

代码片段。当我删除这段代码时,这个问题没有发生。

private func downloadImages(_ card: CardModel) {
if let placeAvatarURLString = card.photoURLsProperties.placePhotoURLs.first {
if let placeAvatarURL = URL(string: placeAvatarURLString) {
venueImageView.kf.indicatorType = .activity
venueImageView.kf.setImage(with: placeAvatarURL)
} else {
venueImageView.image = UIImage(named: "CardDefaultImage")
}
} else if let eventLogoURLPath = card.photoURLsProperties.placeLogoURLs.first {
if let url = URL(string: eventLogoURLPath) {
venueImageView.kf.indicatorType = .activity
venueImageView.kf.setImage(with: url)
} else {
venueImageView.image = UIImage(named: "CardDefaultImage")
}
} else {
venueImageView.image = UIImage(named: "CardDefaultImage")
}
}

enter image description here

更新::我发现发生这种情况时存在规律性。当 ImageCache 提取大于 5 兆字节的图像时,会发生这种内存跳跃。我发现在这个方法diskImage中使用debugPrint,如果图像等于或大于5兆,那么就会跳转,如果4兆,那么一切都很好。

我正在 iPhone 7 上测试,超过 74 GB 的可用内存。

 func diskImage(forComputedKey key: String, serializer: CacheSerializer, options: KingfisherOptionsInfo) -> Image? {
if let data = diskImageData(forComputedKey: key) {
debugPrint("ImageCache data.count", data.count / 1024 / 1024)
return serializer.image(with: data, options: options)
} else {
return nil
}
}

最佳答案

在我解决问题的那一刻,我编写了自定义 CacheSerializer,并将图像压缩到 3 兆字节。但我对其他答案很感兴趣,如何解决这个问题。

import Kingfisher

struct AppNameKingfisherCacheSerializer: CacheSerializer {

func data(with image: Image, original: Data?) -> Data? {
return image.compressToData(3)
}

func image(with data: Data, options: KingfisherOptionsInfo?) -> Image? {
return UIImage(data: data)
}

}

关于ios - 翠鸟中奇怪的 RAM 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44381191/

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