【问题标题】:IOS Memory and Memory ManagementIOS内存和内存管理
【发布时间】:2016-10-12 04:31:57
【问题描述】:

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

navigationController1

firstViewController->secondViewController->thirdViewController->firstViewController

navigationController2

firstViewController->secondViewController->thirdViewController->firstViewController

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

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

随着应用程序的启动,当我在堆栈中添加 viewControllers 时,内存以与上次相同的速度增加(0.1 MB)我不明白它背后的原因以及所看到的整体逻辑是什么?

“我很抱歉,因为 tabBar 中没有显示按钮,tabBar Navigation1 和 Navigation2 上有两个标题,而且按钮具有推送视图的方法”

【问题讨论】:

    标签: ios xcode memory memory-management uiviewcontroller


    【解决方案1】:

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

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

    【讨论】:

    • 所以你是想说 viewControllers 不采用他们使用图像参考的图像的实际大小?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2011-10-19
    相关资源
    最近更新 更多