这似乎是一个简单的问题,但我看不到任何明确的答案。
在UIViewController
功能中:
func present(_ viewControllerToPresent: UIViewController,
animated flag: Bool,
completion: (() -> Void)? = nil)
completion
块是否保证在主线程上运行?
换句话说。我可以这样做吗:
vc.present(anotherVC, animated: animated) { [weak self] in
guard let self = self else { return }
// do some UI operations
self.<...>
}
或者我应该这样做:
vc.present(anotherVC, animated: animated) {
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
// do some UI operations
self.<...>
}
}
注意:我试着测试了很多次,似乎它总是在主线程上运行。但这可能是偶然的,苹果的医生没有明确表示。
完成回调在主线程上运行。没有其他原因,因为可可的所有UI相关操作都是在主线程上完成的。但是,您也应该从主线程调用present
函数。