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

tom*_*dey 9 multithreading ios swift photosframework

我想在用户的照片库上做一些工作.由于库可能很大,我想在后台进行.我想知道是否可以安全地执行资产提取(例如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)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何文档参考我可以了解照片框架和后台访问?

Lud*_*dry 2

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