我想知道deinit
在每个视图控制器上实现 a 以检查它在消失时是否正确删除并避免内存泄漏是否是一种好习惯?
3 回答
默认情况下,您不必在类中实现该deinit
方法:
Swift会在不再需要时自动释放您的实例,以释放资源。Swift 通过自动引用计数 (ARC) 处理实例的内存管理,如自动引用计数中所述。通常,当您的实例被解除分配时,您不需要执行 手动清理。但是,当您使用自己的资源时,您可能需要自己执行一些额外的清理工作。例如,如果您创建一个自定义类来打开一个文件并向其中写入一些数据,您可能需要在释放类实例之前关闭该文件。
Swift Deinitialization Documentation - Deinitialization 的工作原理部分。
通常,在使用 View Controller 时,似乎没有必要进行这样的实现。但是,正如@rmaddy的评论中提到的,它仍然是一种使用视图控制器跟踪内存泄漏或引用周期的方法。
如果您的目的是检查控制器是否已从层次结构中删除(视图控制器生命周期),您可以实现viewWillDisappear(_:) 或viewDidDisappear(_:)方法;请注意,调用这些方法并不能保证deinit
将被调用,即它并不意味着消失视图控制器总是会导致释放它(相关:Deinit never called,deinit not called 的解释)。
还:
这些问答应该很有用:
Swift 会在不再需要时自动释放您的实例,以释放资源。因此,添加deinit
所有您viewControllers
似乎没有必要。在解除分配对象之前,您应该deinit
在需要执行某些操作或清理时调用。
好吧,在测试阶段这可能是个好主意,因为您可以检查一切是否正常(例如,如果您有很多完成处理程序),但总体而言这是不必要的。