ios - 我可以在后台线程中获取 PHAsset 吗?

标签 ios swift multithreading photosframework

我想对用户的照片库做一些工作。由于图书馆可能很大,我想在后台进行。我想知道执行 Assets 获取(如 PHAsset.fetchAssets )并在后台处理它们是否安全?

我现在只需要 Assets 元数据。

这样的事情是否安全:

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)
            }
        }
    }
}

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

最佳答案

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

关于ios - 我可以在后台线程中获取 PHAsset 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44563228/

相关文章:

ios - 在 iOS 11 上无需滚动即可在导航栏中显示搜索栏

ios - 如何保存 Swift 字典结构?

mysql LAST_INSERT_ID 带参数序列实现

tcp - 使用单个 tcp 套接字读取和写入线程

ios - Xcode 11.2.1 线程清理程序 abort_with_payload

ios - 如何确定代码是否在 DEBUG/RELEASE build 中运行?

编写惰性序列转换的 Swift 问题

swift - 为 NSNotificationCenter = Swift deinit() 调用 .removeObserver 的正确位置?

macos - 在 OSX 中,访问(可选?) NSView 子类的属性 "identifier"会导致访问错误

Ruby 输出不显示在 sinatra 浏览器上