cat*_*ate 4 memory-leaks instruments ios xcode5.0.1
我正在开发我的第一个ARC&Core Data项目,基于Xcode(通用)Master-Detail模板.我注意到Xcode5在Debug Navigator中有一个内存显示,但在使用它时,发现它的图形与运行Leaks&Allocations跟踪时在Instruments中显示的mem使用几乎没有相似之处.我已经使用模拟器进行了仪器跟踪(模拟iPhone和iPad - 以及后者的详细信息'卸载'与后者有所不同)以及iPad2和iPodTouch.结果大致相同:
iPhone 6.1模拟器
- A代-------- 1.13 MB
- B代-------- 397.70 KB
- C代-------- 76.96 KB
- D代-------- 11.70 KB
- E代-------- 1.56 KB
- F代-------- 3.48 KB
整体增长率为30%
其中,A代表显示Master表加载的增长,而每个连续的Generation都在Detail视图访问 和交互之后增长(分别需要获取NSManagedObjects和创建NSObject).与其他设备的增长趋势大致相似(A代增长为iPad sim:1.42; iPad2:1.57; iPodTouch:0.94,但同样拖尾).
但是,根据Debug Navigator,每个点的总使用量出现在:
iPhone 6.1 Debug Navigator
- A代-------- 4.2 MB
- B代-------- 6.9 MB - 增长2.7
- C代-------- 7.1 MB - 增长0.2
- D代-------- 7.8 MB - 增长0.7
- E世代-------- 8.0 MB - 增长0.2
- F代-------- 8.4 MB - 增长0.4
整体增长100%!
参考其他类似的问题,我没有启用Zombies.有其他人看到过这样的差异吗?我是否正确倾向于相信仪器而不是Debug Navigator的总结数字?
PS.在运行真实设备时(两者都在iOS5版本上),Debug Navigator的摘要图似乎不可用.这是正常的吗?
这对你来说可能不是一个很好的答案,但我已经完成了这项研究,这是我的理由.
调试导航器显示与"活动监视器"仪器相同的内容.它没有显示您的应用程序当前分配的内存,它显示操作系统允许您的应用程序的当前内存.
假设我创建了一个for循环来在内存中创建大量对象,但后来我删除了其中一半,因为它们不符合我的搜索条件(编码错误,我知道,但假设在这里).操作系统将从您的应用程序获取完整内存的请求以创建所有对象,但在循环后检查仪器中的分配时,它仅显示已保存的对象,因为垃圾收集取出了已删除的对象.操作系统可能会或可能不知道垃圾收集事件,但它不会占用它只是让你离开的内存.我不确定从您的应用程序提供/获取可用内存的开销,但我确信他们会考虑到这一点.我注意到,如果我单独留下我的应用程序足够长的操作系统需要一些我没有使用的内存.
只需将调试内存信息视为操作系统分配的应用程序的完整内存.您可能没有使用所有这些,但操作系统无论如何都给了您(出于某种原因).此数字将根据您应用的请求/使用情况而增加.它会因内存压力警告或不活动而降低,操作系统认为它可以安全地从您那里恢复内存.它可能永远不会匹配仪器分配的内存信息,因为在应用程序中总是存在瞬态内存,即使在短时间内也需要在某些地方分配.
再一次,这是我的结论,基于我想知道你是同样的事情.希望它有所帮助.
| 归档时间: |
|
| 查看次数: |
2573 次 |
| 最近记录: |