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

最佳答案

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

当实例不再存在时,Swift 会自动重新分配您的实例
需要,以释放资源。 Swift处理的内存管理
通过自动引用计数(ARC)实例,如
自动参考计数。通常,您不需要执行
释放实例后进行手动清理。但是,当你
正在使用您自己的资源,您可能需要执行一些操作
自己额外清理。例如,如果您创建一个自定义类
要打开文件并向其中写入一些数据,您可能需要关闭
释放类实例之前的文件。

Swift反初始化文档-How Deinitialization Works部分。

通常,在使用View Controllers时,似乎不需要执行这种实现。但是,如@rmaddy的注释中所述,它仍然是使用视图控制器跟踪内存泄漏或引用周期的方法。

如果您的目的是检查是否已将控制器从层次结构中删除(查看控制器生命周期),则可以实现viewWillDisappear(_:)viewDidDisappear(_:)方法。请注意,调用这些方法并不能保证会调用deinit,即,这并不意味着消失的视图控制器始终会导致对其进行释放(相关:Deinit never calledexplanation for deinit not called)。

也:

这些问与答应该有用:

  • When should I use deinit?
  • how to make deinit take effect in swift
  • Understand deinitialization and inheritance in swift language
  • 关于ios - Deinit是在viewControllers上实现它的好习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46745421/

    10-11 19:48