如何查看哪些对象保留了另一个特定对象

How to see which objects is retaining another specific object

我有一个 NSOutlineView 从屏幕上移除时应该 dealloc 但由于没有发生,我怀疑另一个对象持有对它的引用。

是否可以查看有多少 references 以及哪些对象引用了 XcodeProfiler 中的 object/view

编辑:虽然我确实找到了另一种解决方案,但我仍然想知道是否有无论如何可以看到持有(保留)某个对象的列表 object/view

您永远无法获得 'objects retaining a certain object' 的列表,因为引用计数只是一个计数 - 没有 FIFO 或 LIFO 或任何类型的保留和释放之间的直接匹配 -这只是一个计数。

可以做的是使用 Instruments 显示负责对您的对象进行保留调用和释放调用的所有对象的列表。使用分配工具,确保选中 "Record Reference Counts"。然后,您可以使用“统计信息”视图查看 运行 应用中的所有活动对象。单击任何对象右侧的小右箭头可查看对该对象的 table 次 retain/release 次调用。在这里您可以看到引用计数上下波动,并希望找到 'mysteriously' 保留 and/or 未释放的对象。

一些常见的过度保留问题是:a。代表需要是弱属性,b。需要注销视图控制器或 window 控制器中的任何观察者,c。将视图插入视图层次结构时会保留该视图。