Deinit是一个在viewControllers上实现它的好习惯吗?

时间:2017-10-14 14:03:31

标签: ios swift uiviewcontroller deinit

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

3 个答案:

答案 0 :(得分:2)

默认情况下,您必须在您的课程中实施deinit方法:

  

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

     

Swift Deinitialization文档 - How Deinitialization Works部分。

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

如果您的目的是检查控制器是否已从层次结构中移除(查看控制器生命周期),您可以实施viewWillDisappear(_:)viewDidDisappear(_:)方法;请注意,调用这些方法 not 保证将调用deinit,即它并不意味着消失视图控制器总是导致取消分配它(相关:{{3} },Deinit never called)。

同时

这些Q& As应该有用:

答案 1 :(得分:1)

当不再需要实例时,Swift会自动释放您的实例,以释放资源。因此,在deinit上添加viewControllers似乎是不必要的。在解除分配对象之前,只要需要执行某些操作或清理,就应该调用deinit

答案 2 :(得分:1)

在测试阶段,这可能是个好主意,因为你可以检查一切是否良好(例如,如果你有很多完成处理程序)但总体而言是不必要的。