当init抛出异常时会调用deinit吗?

时间:2017-07-30 08:32:10

标签: swift

考虑以下示例类:

my-project-launcher.jar

如果createSocket()抛出并且init()因此失败会发生什么?袜子将保持未初始化状态。当init()抛出时,仍然会调用deinit(在部分未初始化的对象上)吗?

1 个答案:

答案 0 :(得分:4)

deinit未在未正确初始化的实例上调用。

如果init由于某种原因失败,那么类实例永远不会开始存在。因此,没有可以调用deinit的实例。

如果可以在部分初始化的实例上调用deinit,则会破坏非可选属性的约定 - 在您的示例中,socket属性不会被分配,并且仍然可以访问deinit作为非可选但没有值。