为什么未在UITabBarController上调用deinit?

时间:2018-08-31 18:46:19

标签: swift memory uitabbarcontroller deinit

我正在学习Swift。我不会说我是新手,但是我敢肯定,就像许多在线学习一样,我已经错过了很多了解实际情况的基本步骤。

在我的应用程序走得很远之后,我现在发现我的内存管理非常差。我正在使用SDWebImage缓存,它肯定会受到GIFS的影响,但现在我正在学习有关保留周期和取消初始化的更多信息。

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

任何建议将不胜感激

谢谢。

2 个答案:

答案 0 :(得分:1)

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

如果应用程序的根视图控制器是永远不会消失的选项卡栏控制器,则选项卡的视图控制器也不会消失。

如果相反,您创建了一个标签栏控制器并将其推入导航堆栈或以模态显示,则在弹出/关闭该标签栏控制器时将对其进行释放,并且随后将释放视图控制器。

答案 1 :(得分:0)

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