我是新手,正在学习 IOS 应用程序开发,让我告诉你,我对内存和内存管理<一无所知强>。当我在玩 tabViewController 时,我创建了两个选项卡和三个 ViewController 并将它们连接起来 via NavigationalController 并将它们链接为像这样的循环:-
navigationController1
firstViewController -> secondViewController -> thirdViewController -> firstViewController
navigationController2
firstViewController -> secondViewController -> thirdViewController -> firstViewController
并在 Simulator 上运行它们并注意到,一旦我将 ViewControllers 放到堆栈上,内存就会增加 0.1 MB。
然后我在 firstViewController (NavigationController1) 上添加了一个大小为 4.5 MB 的单个图像并运行应用程序突然我注意到内存达到了 66 Mb
当应用程序启动时,当我在堆栈上添加 viewControllers 时,内存以与上次相同的速度增加(.1 MB)我不明白它背后的原因以及整个看到的逻辑是什么?
“对于按钮未显示在 tabBar 中的原因,我深表歉意,tabBar 上有两个标题 Navigation1 和 Navigation2,而且按钮具有推送 View 的方法”
最佳答案
当图像加载到内存中时,它会被解压缩。虽然压缩图像可能不需要超过 4.5 MB 的高分辨率(例如通过保存为 JPEG),但它的未压缩大小可能会高很多。即使 UIImageView
只是屏幕的一部分,甚至不在屏幕上,它仍然需要基于图像原始分辨率的内存量。
另外,这里有一个 View Controller 循环。一旦你从 VC1 -> VC2 -> VC3 -> VC1 你不会得到最后一个 VC1 的原始实例,而是一个新实例,这意味着你将在内存中同时拥有 4 个 View Controller 时间。从 VC3 返回 VC1 应该做的是弹出 View Controller 堆栈,而不是添加另一个 VC1 实例。您可以通过在 VC3 上调用 self.navigationController?.popToRootViewControllerAnimated(true)
来完成此操作。
关于IOS内存和内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37761237/