我的应用程序正在下载base64编码的内容,在大多数情况下是PDF文档。它通过Web服务传输并包含在SOAP中。文档最大可达100 MB。
要在本地存储这些文件,我需要从SOAP信封中提取它们,解码base64字符串并写入存储。
问题是,大约1 MB的文档会将临时内存使用量增加20-30 MB。跟踪仪器中的分配时,我可以看到这些峰值。这不是一个问题。但是一个60 MB的文档会将内存增加大约800 MB,这对于iOS设备来说肯定是太多了。
我正在尝试更改应用,以便可以防止或至少降低峰值。唉,我不知道哪行代码是负责任的。
是否有可能单步执行代码并同时查看当前分配或内存使用情况?
我知道当应用程序由Instruments执行时,单步操作不起作用。那么,还有其他选择吗?
以下是仪器的外观:
提前致谢!
答案 0 :(得分:4)
要在特定时间段内跟踪分配,我通常使用检查范围按钮标记时间线中的起点和终点:
过滤分配列表,只显示在该段时间内完成的分配。我通常按“#living”列排序,以便找出在此期间分配的对象类型。打开扩展详细信息面板后,我选择哪个可疑对象并按类名单击箭头:
显示该类型对象的实例列表。选择一个,将在扩展面板中显示堆栈跟踪。该信息可以暗示您如何分配这些对象。
此外,如果再次使用类名称的箭头选择特定实例,则会根据内存事件看到该对象的历史记录。此外,如果双击堆栈跟踪调用,它将显示发生内存事件的代码:
通过这些信息,您应该能够知道发生了什么。如果您选择的对象不是罪魁祸首,您可以继续检查其余对象。要导航回对象列表,您可以单击导航栏中的“对象摘要”:
好狩猎。
答案 1 :(得分:1)
查看此link,以帮助您了解堆分配。它将帮助您跟踪分配。希望这会有所帮助。您还可以使用活动监视器,它可以让您在使用该应用程序时跟踪应用程序在任何特定时间消耗的内存。
你也可以查看分配内存的代码,请找到附带的截图。