我试图在我的 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 缓冲区。