考虑以下示例类:
my-project-launcher.jar
如果createSocket()抛出并且init()因此失败会发生什么?袜子将保持未初始化状态。当init()抛出时,仍然会调用deinit(在部分未初始化的对象上)吗?
答案 0 :(得分:4)
deinit
未在未正确初始化的实例上调用。
如果init
由于某种原因失败,那么类实例永远不会开始存在。因此,没有可以调用deinit
的实例。
如果可以在部分初始化的实例上调用deinit
,则会破坏非可选属性的约定 - 在您的示例中,socket
属性不会被分配,并且仍然可以访问deinit
作为非可选但没有值。