我正在学习 Swift。我不会说我是一个新手,但我敢肯定,就像许多在线学习一样,我错过了很多理解真正发生的事情的基本步骤。
在我的应用程序走得很远之后,我现在看到我的内存管理非常差。我正在使用SDWebImage缓存,这肯定会受到GIFS的影响,但更重要的是,我现在正在学习保留周期和deinit。
有人可以解释一下为什么UITabBarController deinit中的ViewController永远不会被调用?为什么这不是一件坏事?(除非是(并且只是使用标签栏控制器时内存管理的一般建议/说明。我已经研究了保留周期以及它们被引起和修复的原因,但根据 xCodes 仪器工具,这似乎不是我的问题。
任何建议将不胜感激
谢谢。
选项卡栏控制器不会创建和销毁它管理的视图控制器(选项卡(。它保留所有这些,以便用户可以根据需要在它们之间切换。因此,只要选项卡栏控制器仍然存在,选项卡中的视图控制器就会持续存在。
如果应用的根视图控制器是永远不会消失的选项卡栏控制器,则选项卡的视图控制器也不会消失。
相反,如果您创建一个选项卡栏控制器并将其推送到导航堆栈上,或者以模式方式显示它,则选项卡栏控制器将在弹出/关闭时释放,然后视图控制器也将释放。
此外,对象可能无法取消初始化的另一个原因是引用。由于您刚刚开始 Swift,我强烈建议您查找有关引用周期、ARC(自动引用计数(和内存泄漏的教程。他们会教你弱
变量 以及使用它的适当时间。开始时,我会说这不太重要,但是在以后尝试在软件开发领域找到工作时,它们很有价值。