我看到URLSession.dataTask(with:completionHandler:)
是异步功能,而Data(contentsOf:)
是同步功能。是什么让这些功能异步或同步?
答案 0 :(得分:2)
方法/方法调用始终是同步的。但是某些方法以异步方式表现意味着即使在方法完成/返回之后仍然有工作要做。
方法的定义中没有任何内容表明它是否表现得如此。事实上有一个completionHandler 提示,该方法可能正在进行一些异步工作,但不能保证并且缺少completionHandler也不能保证该方法不会执行某些异步工作。 如果方法接受完成处理程序并执行一些异步工作,并且在方法返回后将调用completionHandler,那么闭包参数必须有@escaping
。
结论:你必须阅读文档和/或查看方法的实现,以了解它的作用。