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

d00*_*dle 3 macos profiler cocoa objective-c

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

是否有可能看到有多少references和哪些对象有一个object/viewin XcodeProfiler

编辑:虽然我确实找到了另一种解决方案,但我仍然想知道是否有任何方法可以查看保留(保留)某个对象/视图的对象列表

小智 12

您永远无法获得"保留某个对象的对象"的列表,因为引用计数只是一个计数 - 没有FIFO或LIFO或者保留和释放之间的任何直接匹配 - 它只是一个计数.

可以做的是使用Instruments来显示所有对象的列表,这些对象负责保留对象的调用和释放调用.使用分配工具,确保选中"记录参考计数".然后,您可以使用"统计"视图查看正在运行的应用程序中的所有活动对象.单击任何对象右侧的小右箭头以查看该对象的保留/释放调用表.在这里您可以看到refcount上下移动,并希望找到"神秘地"保留和/或不释放的对象.

一些常见的过度保留问题是:a.代表需要弱势,b.需要取消注册视图控制器或窗口控制器中的任何观察者,c.插入视图层次结构时保留视图.