我的应用似乎在加载时冻结了用户界面(猜测它在主线程上运行)。我遵循其他S.O答案的建议并使用loadValuesAsynchronously
,但这似乎并没有帮助。任何想法为什么会发生?
DispatchQueue.global(qos: .background).async {
let asset = AVURLAsset(url: self.URL, options: nil)
asset.loadValuesAsynchronously(forKeys: ["duration"], completionHandler: { () -> Void in
DispatchQueue.main.async {
completion(asset)
}
})
}
//above completion calls:
fileprivate func validateAsset(_ asset : AVURLAsset) -> Bool {
var e: NSError?
asset.statusOfValue(forKey: "duration", error: &e)
if let error = e {
print(error)
return false
}
return true
}
当UI冻结时我创建了一个断点,它特别指向了这一行:
asset.statusOfValue(forKey: "duration", error: &e)