【发布时间】:2013-06-10 22:26:22
【问题描述】:
我有一个非常笼统的问题。 一般来说,你会怎么做才能找到谁在夺走你的记忆?
我有一个视频编码器,设置非常复杂,images 在一个控制器中,而编码器在另一个控制器中,我要求images 并通过有时要经过很多次的代表来获取它们控制器级别,我还在此过程中使用了一些dispatch_async 调用。图像是UIView 的快照并使用CoreGraphics 处理,我将保留最终图像并在使用后将其释放到另一个控制器中。一切正常,内存一直在 25Mb 左右,但是在我完成编码后,内存增长非常快,最多一分钟从 25Mb 变为 330Mb,当然会崩溃。我尝试放置日志并查看是否仍在要求图像但似乎没有任何问题,编码器按预期停止。编码器设置为在后台运行。
一件重要的事情是,如果我尝试查找泄漏(或分配,因为泄漏没有使用 ARC 报告任何内容),应用程序会更快崩溃,但不是因为内存。我怀疑我以某种方式弄乱了调度,并且由于仪器造成的一些延迟,某些东西在指定的时间不可用。但是,我也很难在没有日志的情况下找到它。使用仪器调试时可以看到日志吗?
感谢您提供任何有用的信息。
编辑:我没有做任何事情就成功地使用 allocs 运行仪器,似乎崩溃不一致。我保存了仪器报告,你可以看到内存是如何增加的,有一个分配导致了这种情况,我认为问题又回到了如何阅读它。文件在这里http://ge.tt/1PF97Pj/v/0?c
【问题讨论】:
-
查看 Console.app,它显示了您系统的日志。在仪器下运行时您可能看不到日志,但它们会转到 Console.app。
标签: ios objective-c memory instruments