"UIViewController.spresent"的"completion"



这似乎是一个简单的问题,但我看不到任何明确的答案。

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函数。

相关内容

最新更新