Deinit 在 vi​​ewController 上实现它是一个好习惯吗?

Arr*_*s92 2 uiviewcontroller ios swift deinit

我想知道在每个视图控制器上实现 adeinit以检查它消失时是否被正确删除并避免内存泄漏是否是一个好习惯?

Ahm*_*d F 5

默认情况下,您不必deinit在类中实现该方法:

\n\n
\n

当不再需要实例时,Swift会自动取消分配实例,以释放资源。Swift 通过自动引用计数 (ARC) 处理实例的内存管理,如自动引用计数中所述。通常,当您的实例被释放时,\xe2\x80\x99 不需要执行\n 手动清理。但是,当您使用自己的资源时,您可能需要自己执行一些额外的清理工作。例如,如果您创建一个自定义类来打开文件并向其中写入一些数据,则可能需要在释放类实例之前关闭该文件。

\n\n

Swift 去初始化文档 -去初始化如何工作部分。

\n
\n\n

通常,在使用视图控制器时,似乎不需要执行这样的实现。然而,正如@rmaddy的评论中提到的,它仍然是使用视图控制器跟踪内存泄漏或引用循环的方法。

\n\n

如果您的目的是检查控制器是否已从层次结构中删除(视图控制器生命周期),您可以实现viewWillDisappear(_:)viewDidDisappear(_:)方法;请注意,调用这些方法并不能保证deinit被调用,即,这并不意味着消失视图控制器总是会导致释放它(相关:Deinit never Calldeinit not Call的解释)。

\n\n

还:

\n\n

这些问答应该有用:

\n\n\n