IOS内存和内存管理

标签 ios xcode memory memory-management uiviewcontroller

我是新手,正在学习 IOS 应用程序开发,让我告诉你,我对内存和内存管理<一无所知。当我在玩 tabViewController 时,我创建了两个选项卡和三个 ViewController 并将它们连接起来 via NavigationalController 并将它们链接为像这样的循环:-

navigationController1

firstViewController -> secondViewController -> thirdViewController -> firstViewController

navigationController2

firstViewController -> secondViewController -> thirdViewController -> firstViewController

并在 Simulator 上运行它们并注意到,一旦我将 ViewControllers 放到堆栈上,内存就会增加 0.1 MB。

enter image description here

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

enter image description here

当应用程序启动时,当我在堆栈上添加 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/

相关文章:

memory - 用小内存在大图上进行广度优先搜索

java - 防止可能由于线程导致的堆内存不足异常

ios - iPhone - [NSUserDefaults standardUserDefaults] 文件存储在计算机上的什么位置?

xcode - 如何在 Xcode 5 中添加现有框架

swift - 在 SKScene 中隐藏和取消隐藏按钮

xcode - 如何在 Xcode 9 中重置模拟器

ios - 无法使用 tableview cell.accessoryView 进行 Click 事件

ios - 如何从我的 iOS 应用程序中删除 Twitter 的 session 和 cookie

ios - 检索到 "total_count":514 from FB, 只想将 "514"发布到 Parse

arrays - MIPS 钻石分选