好的,这是一个非常模糊的问题,但让我给你一些背景知识:
到目前为止,我有一个直接的应用程序 - 大约5个屏幕,每个屏幕都会点击数据库并在结果视图上显示一些信息。对象不是巨大,大约有15个属性,其中一些属性是包含3-4个对象的NSSets。
我注意到,当我在第5屏幕上时,内存已经跃升至接近6mb,这对我来说似乎很大(虽然我可能错了)。
每次我像NSFetchRequest那样使用常用的NSManagedObjectContext,NSPersistentStoreCoordinator等进行数据库调用时,我会注意到1mb跳跃。
当我完成数据库或类似的事情时,是否需要关闭上下文?我记得这些持久性上下文在我的Java时代引起了巨大的内存问题,并且因为没有其他任何事情(我相信)可以真正对应用程序征税,我猜这个问题就在那里。
我正在使用ARC和CoreData。
对此的任何见解都将非常感激。
更新
所以我使用了推荐的仪器(伟大的工具顺便说一句),看起来问题是由一个屏幕引起的,大约30-40 UILabels(导致使用大约4MB)。对UILabels来说似乎有很多记忆,或者我完全不在了吗?
答案 0 :(得分:1)
每个UIView
都有一个CALayer
。所以每个视图最终都会缓存其内容。假设您的30-40标签最终填满了屏幕并且您使用的是iPhone 4,那么您预计它们的内存占用量至少为960 * 640 * 4 = 2.4mb。我愿意打赌他们会占用更多的空间。
如果你患有它,请忽视你的直觉,认为这是一种巨大的浪费,因为:
通常情况下,只有在内存可用时才会占用内存 - 这是一个简单的事情,因为它可能并不总是可用而不会忽略资源。