为什么在UITabBarController上没有调用deinit?

问题描述 投票:2回答:2

我正在学习Swift。我不会说我是新手,但我确信很多人在网上学习我错过了很多基本步骤来理解真正发生的事情。

在与我的应用程序相处得很远后,我现在看到我的内存管理非常糟糕。我正在使用SDWebImage缓存,这肯定会受到GIFS的影响,但更多的是我现在正在学习保留周期和deinit。

有人可以解释一下为什么UITabBarController deinit中的ViewController永远不会被调用吗?为什么这不是一件坏事? (除非是),并且只是在使用标签栏控制器时对内存管理的一般建议/指导。我已经研究了保留周期及其原因和修复原因,但根据xCodes仪器工具,这似乎不是我的问题。

任何建议将不胜感激

谢谢。

swift memory uitabbarcontroller deinit
2个回答
1
投票

标签栏控制器不会创建和销毁它管理的视图控制器(选项卡)。它保留在所有这些上,因此用户可以根据需要在它们之间切换。因此,只要标签栏控制器持续存在,标签中的视图控制器就会持续存在。

如果您的应用程序的根视图控制器是一个永远不会消失的标签栏控制器,那么标签的视图控制器也不会消失。

相反,如果您创建一个标签栏控制器并将其推送到导航堆栈,或者以模态方式呈现它,则标签栏控制器将在弹出/关闭时释放,然后视图控制器也将被释放。


0
投票

另外,对象可能未被去初始化的另一个原因是因为引用。由于您刚刚开始使用Swift,我强烈建议您查阅有关参考周期,ARC(自动引用计数)和内存泄漏的教程。他们会教你 weak var和使用它的适当时间。在开始时,我会说它不太重要,但是在以后尝试获得软件开发工作时它们很有价值。

© www.soinside.com 2019 - 2024. All rights reserved.