我正在使用带有分配工具的仪器。我只测试与我的应用程序的固定交互。
我有一个导航控制器,深达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)
所以我的问题是这是否意味着我有泄漏或这是正常的吗?分配图表数据实际上代表什么?为什么即使我重新回到初始状态,价值也会增加?我担心如果我的应用程序运行得足够长,它将消耗太多内存,即使所有用户正在做的是推送和弹出视图控制器。
任何想法都会有所帮助。
答案 0 :(得分:1)
这是在模拟器中,还是在设备上?
最好验证设备上是否存在问题,因为某些系统库在设备上比在模拟器中更频繁地释放内存。
如果泄漏没有显示任何内容,那是因为即使你认为自己没有,你仍然会在某个地方提到记忆。为了帮助跟踪该情况,请突出显示内存增加的图形的一小部分,然后选择“已创建且仍然存在”。现在,您只能看到分配的内存,并开始追踪问题所在。
答案 1 :(得分:1)
如果你有最新的iPhone SDK,它附带的仪器版本(我相信2.7)具有HeapShot功能。您可以观看一些WWDC '10视频以获取更多信息,但基本上您在第一次弹出控制器时拍摄,然后在第二次弹出时再次拍摄。它将向您显示两个时刻不同的内存分配。
答案 2 :(得分:0)
是的,这是泄漏。沿线的一个视图控制器缺少一些东西。
答案 3 :(得分:0)
你可能有泄漏。检查泄漏仪器,它可以帮助您找到它们。
答案 4 :(得分:0)
如果您正在加载图像,那么您很可能使用[UIImage imageNamed:]导致系统缓存并可能导致您的内存使用。但总之是的,你有泄漏。