我有一个通用应用程序,它本质上是一个包含图像和文本的文章列表,以及应用程序左侧的菜单。我有谷歌分析,以及解析框架。
iPad和iPhone上的应用程序之间的唯一区别是侧面菜单始终在ipad上可见,并且一些界面对象被移动。 (列表的不同单元格布局 - 相同的内容)。
使用我编写的一组类异步加载图像,以便使用NSOperationQueue下载/保存在NSCache对象和磁盘上。 (当用户离开应用程序时擦除磁盘缓存)。 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上应用程序的内存使用量?我认为没有理由会使用这么多内存。
答案 0 :(得分:0)
很难看到......正如一个人所说,视网膜设备将根据来源使用更多内存,如果在你设置@ 2x图像的捆绑中它将加载它们,并且它们使用更多内存。 试图使用分配来分析虚拟内存? 使用内存通常很好,即使它发出内存警告,问题是你如何响应它,当它来的时候它是否有足够的内存?尝试使用模拟器来模拟内存警告。注意sim使用的内存比设备多。 另一点是,由于ARC很难创建泄漏,但更容易创建保留周期和废弃内存。正确的对象生命周期应以对象释放结束。 你说你使用NSCache并从网络异步加载图像,我有3个建议: