为什么 Objective-C dispatch_group_create() 可以返回 NULL 而 Swift DispatchGroup() 不能?

2024-04-02

我注意到用于调度组的 Swift API 和 Objective-C API 之间存在差异。

The init() for DispatchGroup() https://developer.apple.com/documentation/dispatch/dispatchgroup/1452975-init返回一个非可选值。

但是 Objective-Cdispatch_group_create() https://developer.apple.com/documentation/dispatch/1452975-dispatch_group_create提到了一种可能性NULL return:

返回值

新创建的组,或失败时为 NULL。

  • 什么可能导致 Objective-C 函数失败?哪些幕后问题可能导致团队无法创建?
  • 为什么 Swift 版本不是可选的,而 Objective-C 版本是可选的?如果创建可能因任何原因失败,为什么同样的原因不适用于 Swift?

在 Objective-C 中,任何对象引用都可以nil,并且对对象初始值设定项的任何调用都必须应对以下可能性:nil可能会被退回。

因此,在 Swift 中,理论上每个 Objective-C 对象都需要是一个可选对象——在 Swift 1 中确实如此:它们都是隐式解包的可选对象。但后来,Swift 中的每个 Objective-C 对象引用都被手工调整为normal可选还是普通的非可选,取决于它是否真的可以通过nil or not.

好吧,你调用时得到的对象dispatch_group_create()所以can理论上是nil,事实上它永远不会。 Swift 风格的 DispatchQueue 代码的创建者知道这一点,因此 DispatchGroup 初始值设定项不可为 null。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Objective-C dispatch_group_create() 可以返回 NULL 而 Swift DispatchGroup() 不能? 的相关文章

随机推荐