IOS 应用程序的内存使用大小
Size of memory usage of IOS App
我创建了一个有 12 个视图控制器的应用程序,它有很多图形(图像文件)
当我启动应用程序时,我注意到内存随着我在视图控制器中移动而增加。当我在所有控制器中移动后,内存为 530Mb
所以我的问题是:-
a) 是否要使用大量内存
b) 我应该担心吗
c)我如何在导航时从内存中删除视图控制器..例如我有一个用于登机的视图控制器,但是一旦点击跳过或开始,我就会转到下一个视图控制器,所以理论上它不会不需要再加载了..
想法?
我 运行正在使用具有 3Gbm 的 iPhone 7 Plus,但希望能够 运行 其他 phone 机型上的应用 iPhone SE 起。但是我注意到内存配置文件大约是 iPhone SE 的 50% 但假设那是因为它没有按照 plus phone
加载 x3 图像
a) is this a lot of memory to be using
lot是相对的,530Mb是不是lot完全取决于app在做什么,是什么app!如果它是一款具有丰富图形的游戏,我不会太在意,但如果它是一款普通的实用程序,我会担心!
b) should I be worried
随着用户加载应用程序的各种屏幕,内存获取 accumulated/increasing 是一种非常常见的情况。如果它不断增加并且永远不会下降,您应该感到困扰。每次加载 VC 时,它可能会加载大量图形,或者可能会分配大量变量并消耗大量内存来执行其功能。这很公平。但是,一旦用户从应用程序导航堆栈中弹出 VC,则应返回 VC 分配的所有内存,并且应用程序消耗的总内存应该会下降。理想的内存足迹看起来像一个波浪,它达到峰值并在 VC 弹出时下降。如果那没有发生,你就有麻烦了:)
c) how can I remove view controllers from memory as I navigate round
使用正确的导航技术。不要一直将 VC 推送到导航控制器堆栈,除非您确实需要将 VC 实例保留在内存中。推送到导航堆栈的所有 VC 将继续保留在内存中,直到用户终止应用程序或 iOS 决定在收到内存警告时终止应用程序。
在每个 VC 中写入 deinit/dealloc 并确保每次用户弹出 VC 时都会调用它,方法是在按下后退按钮时轻按或关闭VC 如果它以模态方式呈现。确保调用每个 VC 的 deinit 是确保 VC 不会占用任何不必要内存的最佳方法。
确保您的 VC 的 none 具有导致保留周期并将对象永久保留在内存中的代码。示例:如果您的 VC 声明了一个块并持有对块的强引用,并且如果您传递 self 来阻止您的块,那么 self 将永远不会被释放。保留循环的经典例子。确保您的代码不会产生此类死锁
除非必要,否则切勿使用 strong/retain 强握任何东西。
使用仪器查找每个对象的内存泄漏和引用计数,以确保您的应用程序中没有内存泄漏。
我创建了一个有 12 个视图控制器的应用程序,它有很多图形(图像文件)
当我启动应用程序时,我注意到内存随着我在视图控制器中移动而增加。当我在所有控制器中移动后,内存为 530Mb
所以我的问题是:-
a) 是否要使用大量内存 b) 我应该担心吗 c)我如何在导航时从内存中删除视图控制器..例如我有一个用于登机的视图控制器,但是一旦点击跳过或开始,我就会转到下一个视图控制器,所以理论上它不会不需要再加载了..
想法?
我 运行正在使用具有 3Gbm 的 iPhone 7 Plus,但希望能够 运行 其他 phone 机型上的应用 iPhone SE 起。但是我注意到内存配置文件大约是 iPhone SE 的 50% 但假设那是因为它没有按照 plus phone
加载 x3 图像a) is this a lot of memory to be using
lot是相对的,530Mb是不是lot完全取决于app在做什么,是什么app!如果它是一款具有丰富图形的游戏,我不会太在意,但如果它是一款普通的实用程序,我会担心!
b) should I be worried
随着用户加载应用程序的各种屏幕,内存获取 accumulated/increasing 是一种非常常见的情况。如果它不断增加并且永远不会下降,您应该感到困扰。每次加载 VC 时,它可能会加载大量图形,或者可能会分配大量变量并消耗大量内存来执行其功能。这很公平。但是,一旦用户从应用程序导航堆栈中弹出 VC,则应返回 VC 分配的所有内存,并且应用程序消耗的总内存应该会下降。理想的内存足迹看起来像一个波浪,它达到峰值并在 VC 弹出时下降。如果那没有发生,你就有麻烦了:)
c) how can I remove view controllers from memory as I navigate round
使用正确的导航技术。不要一直将 VC 推送到导航控制器堆栈,除非您确实需要将 VC 实例保留在内存中。推送到导航堆栈的所有 VC 将继续保留在内存中,直到用户终止应用程序或 iOS 决定在收到内存警告时终止应用程序。
在每个 VC 中写入 deinit/dealloc 并确保每次用户弹出 VC 时都会调用它,方法是在按下后退按钮时轻按或关闭VC 如果它以模态方式呈现。确保调用每个 VC 的 deinit 是确保 VC 不会占用任何不必要内存的最佳方法。
确保您的 VC 的 none 具有导致保留周期并将对象永久保留在内存中的代码。示例:如果您的 VC 声明了一个块并持有对块的强引用,并且如果您传递 self 来阻止您的块,那么 self 将永远不会被释放。保留循环的经典例子。确保您的代码不会产生此类死锁
除非必要,否则切勿使用 strong/retain 强握任何东西。
使用仪器查找每个对象的内存泄漏和引用计数,以确保您的应用程序中没有内存泄漏。