IOS内存和内存管理

时间:2016-06-11 07:41:14

标签: ios xcode memory memory-management uiviewcontroller

我是新手并且正在进入 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。

enter image description here

比我在firstViewController(NavigationController1)上添加大小为4.5 MB的单个图像并突然运行应用程序我注意到内存达到了66 Mb

enter image description here

当应用程序启动时,当我在堆栈上添加viewControllers时,内存以与上次相同的速率增加(.1 MBs)我不明白其背后的原因,并且看到了整个逻辑?

“我抱歉的原因按钮没有显示在tabBar中tabBar上有两个标题导航1和导航2按钮也有推送视图的方法”

1 个答案:

答案 0 :(得分:1)

当图像加载到内存中时,它会被解压缩。虽然压缩图像可能不需要超过4.5 MB的高分辨率(例如通过保存为JPEG),但它的未压缩尺寸可能会高很多。即使UIImageView只是屏幕的一部分,甚至是屏幕外,它仍然需要基于图像原始分辨率的大量内存。

此外,您还有一个视图控制器循环。从VC1开始 - > VC2 - &gt; VC3 - &gt; VC1你不会得到最后一个VC1的原始实例,而是一个新实例,这意味着你同时在内存中总共有4个视图控制器。从VC3返回到VC1应该做的是弹出视图控制器堆栈而不是添加另一个VC1实例。您可以通过在VC3上调用self.navigationController?.popToRootViewControllerAnimated(true)来执行此操作。