3

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

在我的应用程序走得很远之后,我现在发现我的内存管理很差。我正在使用 SDWebImage 缓存,它肯定会受到 GIFS 的影响,但更重要的是,我现在正在学习保留周期和 deinit。

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

任何建议将不胜感激

谢谢。

4

2 回答 2

2

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

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

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

于 2018-08-31T19:19:08.393 回答
0

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

于 2018-08-31T20:08:40.340 回答