我正在开发我的第一个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的摘要图似乎不可用.这是正常的吗?
我正在开发我的第一个Core Data项目,基于Xcode的(通用)Master-Detail模板上的NSManagedObjectModel开发阶段.基于ObjectModel的商店已经填充了各种对象的实例.
Nav Controller表视图中填充了12个顶级"Structures",每个"Structures"都有一个与之关联的"DefaultSpace".选择表行时,将根据DefaultSpace的属性使用各种UIView子类填充详细信息视图.从这里开始,我使用一系列临时NSObject子类来响应用户交互(当我开发这个阶段足以更全面地理解持久性需求时,其中一些将被NSManagedObjects取代).
因此,当我在详细视图中对给定的DefaultSpace进行一些测试并返回到Master表以选择另一个Structure的DefaultSpace时,我希望ARC释放不再需要的NSObject.在我的天真,我也期望Core Data对NSManagedObjects做同样的事情,但是仪器告诉我并非如此.
据我所知
[managedObjectContext refreshObject:obj mergeChanges:NO];,用于将现在多余的子对象转换为故障的方法.但是,这似乎意味着遍历关系链并调用[managedObjectContext refreshObject:obj mergeChanges:NO];每个从属NSManagedObject.我的问题是(在什么情况下)我应该这样做,还是我应该主要允许Core Data决定何时"清理"未使用的对象?