我可以在后台线程中获取PHAssets吗?

10

我想对用户的照片库进行一些操作。由于库可能非常大,因此我想在后台处理。我在想,在后台执行像PHAsset.fetchAssets这样的资产获取并对其进行处理是否安全?

目前我只需要资产元数据。

这样做是否安全:

class ViewController: UIViewController {

    var cachedResult = [Any]()

    func doBackgroundCalculationsOnPhotos(completionHandler: ([Any]) -> ()) {
        DispatchQueue.global(qos: .userInitiated).async {
            let photos = PHAsset.fetchAssets(with: .image, options: nil)
            var result = [Any]()

            photos.enumerateObjects({ asset, _, _ in  
                result.append(calculateSomething(asset))
            })

            DispatchQueue.main.async {
                self.cachedResult = result
                completionHandler(result)
            }
        }
    }
}

请问有哪些关于照片框架和后台访问的文档参考资料可以学习?


我有同样的问题。 - Viton Zhang
1个回答

2

是的,获取可能需要一些时间,因此最好将其作为后台操作执行,因为fetchAssets(with:options:)方法是同步的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接