IOS App的内存使用大小

时间:2017-06-14 17:50:48

标签: ios swift3 xcode8

我创建了一个包含12个视图控制器的应用程序,它有很多图形(图像文件)

当我启动应用程序时,我注意到当我移动视图控制器时内存会上升..一旦我移动了所有控制器,内存为530Mb

所以我的问题是: -

a)这是要使用的大量内存 b)我应该担心吗? c)当我导航时,如何从内存中删除视图控制器...例如我有一个用于登机的视图控制器,但是一旦点击跳过或开始,我就会转到下一个视图控制器,所以理论上它并不是#39; t需要再加载..

想法?

我在拥有3Gbm的iPhone 7 Plus上运行,但希望能够从iPhone SE开始在其他手机型号上运行该应用程序。但是我注意到内存配置文件大约是50%没有iPhone SE但是假设这是因为它没有加载x3图像按照加电话

1 个答案:

答案 0 :(得分:1)

  

a)这需要很多内存

很多是相对术语,530Mb是否很多完全取决于应用程序正在做什么以及它是什么类型的应用程序!如果它是一款具有丰富图形的游戏,我不会太烦恼,但如果它是一个简单的实用程序应用程序我会担心!

  

b)我应该担心

当用户加载各种应用程序屏幕时,内存累积/增加是一种非常常见的情况。如果它不断增加而且永远不会下降,你应该感到困扰。每次加载VC时,它都可能加载,加载大量图形或者可能会分配大量变量并占用大量内存来执行其功能。这是相当公平的。但是一旦用户从应用程序导航堆栈弹出VC,应该返回VC分配的所有内存,并且应用程序消耗的总内存应该减少。理想的内存占用空间看起来就像是达到峰值的波浪,一旦VC弹出就会下降。如果没有发生这种情况你就遇到了麻烦:)

  

c)当我浏览

时,如何从内存中删除视图控制器
  1. 使用适当的导航技术。除非您确实需要将VC实例保留在内存中,否则不要继续将VC推送到导航控制器堆栈。推送到导航堆栈的所有VC将继续保留在内存中,直到用户杀死应用程序或iOS决定在收到内存警告时终止应用程序。

  2. 在每个VC中写入deinit / dealloc,并确保每次用户弹出VC时都会调用它,如果按下则按下后退按钮,或者如果按模式显示VC则解除VC。确保调用每个VC的deinit是确保VC不会占用任何不必要内存的最佳方法。

  3. 确保您的VC都没有代码导致保留周期并永久保留内存中的对象。示例:如果VC声明了一个块并保留了对block的强引用,并且如果你传递self来阻止你的块,那么self将永远不会被释放。保留周期的经典例子。确保您的代码不会创建此类死锁

  4. 除非必要,否则不要强烈使用强力/保留。

  5. 使用工具查找每个对象的内存泄漏和引用计数,以确保您的应用程序中没有内存泄漏。

相关问题