如何限制iOS应用内存使用量

时间:2013-07-24 18:23:11

标签: iphone ios memory-management

好的,这是一个非常模糊的问题,但让我给你一些背景知识:

到目前为止,我有一个直接的应用程序 - 大约5个屏幕,每个屏幕都会点击数据库并在结果视图上显示一些信息。对象不是巨大,大​​约有15个属性,其中一些属性是包含3-4个对象的NSSets。

我注意到,当我在第5屏幕上时,内存已经跃升至接近6mb,这对我来说似乎很大(虽然我可能错了)。

每次我像NSFetchRequest那样使用常用的NSManagedObjectContext,NSPersistentStoreCoordinator等进行数据库调用时,我会注意到1mb跳跃。

当我完成数据库或类似的事情时,是否需要关闭上下文?我记得这些持久性上下文在我的Java时代引起了巨大的内存问题,并且因为没有其他任何事情(我相信)可以真正对应用程序征税,我猜这个问题就在那里。

我正在使用ARC和CoreData。

对此的任何见解都将非常感激。

更新

所以我使用了推荐的仪器(伟大的工具顺便说一句),看起来问题是由一个屏幕引起的,大约30-40 UILabels(导致使用大约4MB)。对UILabels来说似乎有很多记忆,或者我完全不在了吗?

1 个答案:

答案 0 :(得分:1)

每个UIView都有一个CALayer。所以每个视图最终都会缓存其内容。假设您的30-40标签最终填满了屏幕并且您使用的是iPhone 4,那么您预计它们的内存占用量至少为960 * 640 * 4 = 2.4mb。我愿意打赌他们会占用更多的空间。

如果你患有它,请忽视你的直觉,认为这是一种巨大的浪费,因为:

  • 在iOS 5及更早版本中,如果发生内存警告,则任何屏幕外视图控制器都会释放其视图;和
  • 在iOS 6下(可能是以后),如果发生内存警告,则附加到所有屏幕外视图的图层将释放其内容。

通常情况下,只有在内存可用时才会占用内存 - 这是一个简单的事情,因为它可能并不总是可用而不会忽略资源。