objective-c - 在 ARC 下的 Cocoa 中,我可以获得引用另一个对象的对象列表(以编程方式或使用仪器)?

标签 objective-c xcode macos cocoa instruments

我正在调试我的 Cocoa 应用程序并注意到使用 Instruments.app 分配配置文件模型对象图没有像我预期的那样解除分配。基本上当我从我的 NSDocument 中删除一个根模型对象时,我期望该对象的整个对象图被释放。这并没有发生,这意味着在应用程序的其他地方存在对我的根模型对象的强引用。

是否有可能以编程方式或使用 Instruments.app 获取引用 Cocoa 中特定对象的对象列表?如果我能知道强引用在哪里,这将有助于调试这个问题。

我发现了这个类似的问题,How to get the reference count of an NSObject? ,但这只是说明有多少个引用,而不是哪些对象持有引用。

最佳答案

不是这样的。存储在运行进程内部的唯一信息是对象的保留次数(“保留”被调用的次数与“释放”被调用的次数之和)。这与引用数(指向内存的“强”指针数)不同。大多数内存位置在 Cocoa 中没有指向它们的边表。

在 Instruments 中,您可以打开“记录引用计数”并查看保留计数在任何地方的增加或减少。参见 Instruments Allocations track alloc and dealloc of objects of user defined classes对于如何做到这一点的一个很好的解释。这不会告诉您在哪里犯了错误,但会告诉您保留发生在何处。

关于objective-c - 在 ARC 下的 Cocoa 中,我可以获得引用另一个对象的对象列表(以编程方式或使用仪器)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127649/

相关文章:

iphone - 延长 iOS 应用程序暂停时间

python - 运行不带 "python"关键字的 python 脚本

macos - 如何清除 "You can’ t 打开应用程序 “q.app” 因为它可能已损坏或不完整”状态?

ios - 如何修复在 iOS 中使用新版本应用程序修改 Core Data 时发生崩溃的问题

objective-c - 如何获取所有 mime 类型 Google Drive Api IOS

iphone - 通用 iPhone/iPad AppDelegate

macos - OS X 10.9 (Mavericks) 上的 HaXml 安装问题

ios - 获取 Youtube 视频的 hd720/hd1080 流

objective-c - 具有运行到完成语义的 KVO - 这可能吗?

ios - 自上次 Xcode 更新以来,我无法处理图像