我想知道在每个视图控制器上实现一个deinit
,以检查它消失时是否已正确删除,并避免内存泄漏,是否是一种好习惯?
最佳答案
默认情况下,您不必在类中实现deinit
方法:
当实例不再存在时,Swift 会自动重新分配您的实例
需要,以释放资源。 Swift处理的内存管理
通过自动引用计数(ARC)实例,如
自动参考计数。通常,您不需要执行
释放实例后进行手动清理。但是,当你
正在使用您自己的资源,您可能需要执行一些操作
自己额外清理。例如,如果您创建一个自定义类
要打开文件并向其中写入一些数据,您可能需要关闭
释放类实例之前的文件。
Swift反初始化文档-How Deinitialization Works部分。
通常,在使用View Controllers时,似乎不需要执行这种实现。但是,如@rmaddy的注释中所述,它仍然是使用视图控制器跟踪内存泄漏或引用周期的方法。
如果您的目的是检查是否已将控制器从层次结构中删除(查看控制器生命周期),则可以实现viewWillDisappear(_:)或viewDidDisappear(_:)方法。请注意,调用这些方法并不能保证会调用deinit
,即,这并不意味着消失的视图控制器始终会导致对其进行释放(相关:Deinit never called,explanation for deinit not called)。
也:
这些问与答应该有用:
关于ios - Deinit是在viewControllers上实现它的好习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46745421/