【发布时间】:2013-06-14 14:18:24
【问题描述】:
我有一个通用应用程序,它本质上是一个包含图像和文本的文章列表,以及应用程序左侧下方的菜单。我有谷歌分析,以及 parse 的框架。
iPad 和 iPhone 上的应用程序唯一的区别是侧边菜单在 ipad 上始终可见,并且一些界面对象会四处移动。 (列表的单元格布局不同——但内容相同)。
图像是使用我编写的一组类异步加载的,这些类用于下载/保存在 NSCache 对象和使用 NSOperationQueue 的磁盘上。 (当用户离开应用程序时,磁盘缓存被擦除)。 NSCache 设置为最大大约 10 mb。 (假设图像大小为图像高度*图像宽度*每张图像 4 字节)。 (这里的代码对于两者都是相同的,所以它不应该是罪魁祸首,但它是应用程序内存使用的很大一部分)。
我在运行 iOS 5.0 的旧 iphone4 上遇到内存警告/崩溃问题,因此我使用 Activity Monitor Instrument 运行该应用程序,发现一些非常奇怪的事情:
在 iPad(运行 iOS 5.1 的 iPad 2)上,应用程序启动,加载了立即可见的图像,并且使用了大约 16mb 的内存。
在它推出的 iPhone4 上,加载了可见图像并使用了大约 35mb 的内存——比我预期的要多得多。
为了检查是否是操作系统内存问题,我还在运行 iOS6 的 iPhone5 上运行了该应用程序,它使用的内存量与 iPhone 4 大致相同。
我检查了我的媒体和故事板文件,看看是否有任何不同之处,但我找不到任何可以显着改变内存使用的东西。
有什么办法可以减少iphone上app的内存占用?我想不出它会使用这么多内存的原因。
【问题讨论】:
-
也许以下会影响您的问题。 iPad 2 不是 Retina 设备,但 iPhone4 是。这意味着加载的纹理最多可能占用 4 倍的内存。
-
根据这里给出的信息很难猜出发生了什么,但是您是否考虑过 iPhone 4 和 5 的视网膜显示屏?请记住,视网膜需要双倍图像尺寸才能看起来正确......
-
这里的其他答案都是不错的猜测,但是要查看内存分配的位置,您需要使用 Allocations 工具,而不是 Activity Monitor 仪器。选择“调用树”,并确保选中“仅显示 Obj-C”和“隐藏系统调用”。
标签: iphone ios objective-c ipad ios-universal-app