【发布时间】:2018-03-04 19:21:50
【问题描述】:
更新到 iOS 11 后,照片资源现在加载缓慢,我在控制台中收到以下消息:
[ImageManager] 无法加载图像数据, /var/mobile/Media/DCIM/103APPLE/IMG_3064.JPG
我使用静态函数加载图片:
class func getAssetImage(asset: PHAsset, size: CGSize = CGSize.zero) -> UIImage? {
let manager = PHImageManager.default()
let option = PHImageRequestOptions()
option.isSynchronous = true
var assetImage: UIImage!
var scaleSize = size
if size == CGSize.zero {
scaleSize = CGSize(width: asset.pixelWidth, height: asset.pixelHeight)
}
manager.requestImage(for: asset, targetSize: scaleSize, contentMode: .aspectFit, options: option) { (image, nil) in
if let image = image {
assetImage = image
}
}
if assetImage == nil {
manager.requestImageData(for: asset, options: option, resultHandler: { (data, _, orientation, _) in
if let data = data {
if let image = UIImage.init(data: data) {
assetImage = image
}
}
})
}
return assetImage
}
为资产请求图像通常总是成功,但它会打印此消息。如果我只使用 requestImageData 函数,则没有这样的消息,但是使用 Apple 相机拍摄的照片会失去方向,并且在加载大量图像时会遇到更多问题(我在我的应用程序中使用图像幻灯片)。
Apple 在更新方面总是很糟糕,也许有人有解决方案如何解决这个问题?当用户相机中有大量资产时,它甚至无法加载资产。切换到 requestImageData 对我来说不是一个选项,因为它现在经常带来 nil 数据。
我想指出,我只调用了这个函数一次。它不在 UITableView 等中使用。我将其他代码用于带有全局初始化管理器和选项的拇指,因此资产绝对不是 nil 等。 我仅在用户单击某个拇指时才调用此函数。 当画廊有 5000 张照片时,可能与资产的连接只是过载,后来它无法处理请求并崩溃? 这么多问题。
【问题讨论】:
-
自从升级到 iOS 11 后,我看到了同样的问题。如果我要求缩略图的尺寸足够小 (256 x 256),它们都会加载。当我对更大的尺寸使用相同的代码时,它会在大约 20% 时失败。还没想出什么规律。
-
您找到解决方法了吗?
-
并非如此,警告仍然存在。
-
你找到解决办法了吗?
-
@LaurentCrivello,在 swift 中没有像 autoreleasepool 这样的东西。我之前已经看过那个解决方案了。
标签: swift uiimage gallery ios11 phasset