gpt4 book ai didi

ios - 如何使用更少的内存在 collectionView 中显示照片库

转载 作者:搜寻专家 更新时间:2023-11-01 06:57:12 29 4
gpt4 key购买 nike

我遇到的问题是人们说在 collectionView 中加载照片库时应用程序崩溃。大多数时候他们有超过 2-3 千张照片。对我来说它工作正常。 (我的图库中只有不到 1000 张照片)。

问题:也许有什么方法可以使 collectionView 中的图像显示得更“智能”并使用更少的内存?

P.S 也许当用户在 iCloud 中拥有他的所有照片时也会导致崩溃?因为直到现在我还认为应用程序在将照片加载到单元格中时并未下载照片。也许有人可以证明或不赞成这个事实。

这是我的功能:

func grabPhotos(){

let imgManager = PHImageManager.default()

let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = false
requestOptions.deliveryMode = .opportunistic // Quality of images
requestOptions.isNetworkAccessAllowed = true

requestOptions.isSynchronous = true
requestOptions.progressHandler = { (progress, error, stop, info) in
print("progress: \(progress)")
}

let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]

if let fetchResult : PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions) {

if fetchResult.count > 0 {
for i in 0..<fetchResult.count {
imgManager.requestImage(for: fetchResult.object(at: i) , targetSize: CGSize(width: 150, height: 150), contentMode: .aspectFill, options: requestOptions, resultHandler: { image, error in
self.imageArray.append(image!)
self.kolekcija.reloadData()
})
}
}
else {
print("You got no photos")
kolekcija.reloadData()
}
}

}

最佳答案

问题是这一行:

self.imageArray.append(image!)

永远不要制作图像数组。图片很大,你会耗尽内存。

这是一个 Collection View 。您只需在 itemForRowAt: 中按需提供图像,您提供的是图像的小型版本(所谓的缩略图) , 显示尺寸的最小可能。因此,在任何时候,缩略图都只够填满可见屏幕;这不会占用太多内存,而且运行时可以在图像滚出屏幕时释放图像内存。

这就是 PHCachingImageManager 的用途。仔细看看 Apple 如何在他们的示例代码中处理这个问题:

https://developer.apple.com/library/archive/samplecode/UsingPhotosFramework/Listings/Shared_AssetGridViewController_swift.html

在那个例子中任何地方都没有图像数组。

关于ios - 如何使用更少的内存在 collectionView 中显示照片库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52909634/

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