我是新手并且正在进入 IOS应用程序开发 ,让我告诉您我对内存和内存管理<一无所知/ strong>。当我玩 tabViewController 时,我制作了两个标签和三个 ViewController ,并通过 NavigationalController 连接它们并将它们链接为一个循环,如: -
navigationController1
firstViewController - &gt; secondViewController - &gt; thirdViewController - &gt; firstViewController
navigationController2
firstViewController - &gt; secondViewController - &gt; thirdViewController - &gt; firstViewController
并在Simulator上运行它们并注意到,只要我在堆栈上获取ViewControllers,内存就会增加.1 MB。
比我在firstViewController(NavigationController1)上添加大小为4.5 MB的单个图像并突然运行应用程序我注意到内存达到了66 Mb
当应用程序启动时,当我在堆栈上添加viewControllers时,内存以与上次相同的速率增加(.1 MBs)我不明白其背后的原因,并且看到了整个逻辑?
“我抱歉的原因按钮没有显示在tabBar中tabBar上有两个标题导航1和导航2按钮也有推送视图的方法”
答案 0 :(得分:1)
当图像加载到内存中时,它会被解压缩。虽然压缩图像可能不需要超过4.5 MB的高分辨率(例如通过保存为JPEG),但它的未压缩尺寸可能会高很多。即使UIImageView
只是屏幕的一部分,甚至是屏幕外,它仍然需要基于图像原始分辨率的大量内存。
此外,您还有一个视图控制器循环。从VC1开始 - > VC2 - &gt; VC3 - &gt; VC1你不会得到最后一个VC1的原始实例,而是一个新实例,这意味着你同时在内存中总共有4个视图控制器。从VC3返回到VC1应该做的是弹出视图控制器堆栈而不是添加另一个VC1实例。您可以通过在VC3上调用self.navigationController?.popToRootViewControllerAnimated(true)
来执行此操作。