iPhone:仪器配置稳步增长

时间:2010-06-29 19:09:38

标签: iphone uinavigationcontroller memory-management instruments

我正在使用带有分配工具的仪器。我只测试与我的应用程序的固定交互。

我有一个导航控制器,深达4级。前两个阶段是标准表视图控制器,后两个是具有动态加载图像的自定义控制器。

所以我在乐器中运行我的应用程序(通过Run with Performance Tool - > Allocations)并执行以下交互:

1.  App Loads
2.  I wait a bit until allocations graph stabilizes
3.  I tap/push into my navigation controller until the deepest level.
4.  I wait for the images to load and for the allocations graph to stabilize.
5.  I tap back out of the navigation controller until I'm back to the root level.
6.  I wait for the allocations graph to stabilize.
7.  GOTO 3.

现在我注意到的是,在每次迭代3到7之间,分配图表显示略高的值。因此,即使我正在执行相同的操作并且正在调用所有视图控制器的dealloc,总体分配也在增加。

所以时间表大致如下:

1.  Start: 1mb
2.  Push controllers/Load images: 4mb
3.  Pop controllers: 1.1mb
4.  Push controllers/Load images: 4.1mb
5.  Pop controllers: 1.2mb
6.  ... etc ... (always increasing slightly)

所以我的问题是这是否意味着我有泄漏或这是正常的吗?分配图表数据实际上代表什么?为什么即使我重新回到初始状态,价值也会增加?我担心如果我的应用程序运行得足够长,它将消耗太多内存,即使所有用户正在做的是推送和弹出视图控制器。

任何想法都会有所帮助。

5 个答案:

答案 0 :(得分:1)

这是在模拟器中,还是在设备上?

最好验证设备上是否存在问题,因为某些系统库在设备上比在模拟器中更频繁地释放内存。

如果泄漏没有显示任何内容,那是因为即使你认为自己没有,你仍然会在某个地方提到记忆。为了帮助跟踪该情况,请突出显示内存增加的图形的一小部分,然后选择“已创建且仍然存在”。现在,您只能看到分配的内存,并开始追踪问题所在。

答案 1 :(得分:1)

如果你有最新的iPhone SDK,它附带的仪器版本(我相信2.7)具有HeapShot功能。您可以观看一些WWDC '10视频以获取更多信息,但基本上您在第一次弹出控制器时拍摄,然后在第二次弹出时再次拍摄。它将向您显示两个时刻不同的内存分配。

答案 2 :(得分:0)

是的,这是泄漏。沿线的一个视图控制器缺少一些东西。

答案 3 :(得分:0)

你可能有泄漏。检查泄漏仪器,它可以帮助您找到它们。

答案 4 :(得分:0)

如果您正在加载图像,那么您很可能使用[UIImage imageNamed:]导致系统缓存并可能导致您的内存使用。但总之是的,你有泄漏。