0

我试图在我的 Cocoa 桌面应用程序中追踪一些特殊的内存行为。我的应用程序使用 NSImage 进行了大量图像处理,并使用 NSURLConnection 通过 HTTP 将这些图像上传到网站。

上传数百张图片(一些非常大)后,当我运行 Instrument 时,我没有泄漏。我也运行过 MallocDebug 并且没有泄漏。当我使用 Instrument 深入研究对象分配时,我得到如下输出:

GeneralBlock-9437184, Net Bytes 9437184, # Net 1
GeneralBlock-192512, Net Bytes 2695168, # Net 14

等等,对于较小的尺寸。当我详细查看这些时,它们被标记为由“基金会”拥有并通过 NSConcreteMutableData initWithCapacity 创建。在 HTTP 上传期间,我正在使用 NSMutableData 创建一个帖子正文,所以我猜这些是 Cocoa 在我创建 NSMutableData 对象时为我缓存的缓冲区。

有没有办法强迫 Cocoa 释放这些?我有 90% 的肯定我正在正确发布(并且 Instruments 和 MallocDebug 似乎证实了这一点),但我认为 Cocoa 出于性能原因保留了这些,因为我分配了这么多 MSMutableData 缓冲区。

4

1 回答 1

0

如果您确定您正确地释放了您拥有的对象,那么您真的无能为力(或应该)做任何事情。正如 Instruments 所说,这些块归 Foundation 所有,因为NSConcreteMutableDataFoundation 对象创建了它们。这些可能是某种NSData故意保留的缓存,但无法知道它们是什么。

如果您认为这是一个错误,您应该在http://bugreport.apple.com报告它。内存所有权规则也适用于不能很好地管理内存的类。

此外,这可能是一个愚蠢的问题,但是您将哪个选项用于 Object Alloc 工具?所有已创建或已创建但仍然存在的对象?您可能正在查看不再重要的分配。

于 2010-03-29T14:04:01.957 回答