我正试图在我的Cocoa桌面应用程序中追踪一些特殊的内存行为。我的应用程序使用NSImage进行大量图像处理,并使用NSURLConnection将这些图像上传到HTTP网站。
上传了数百张图片(有些非常大),当我运行乐器时,我没有泄漏。我也经历了MallocDebug并且没有泄漏。当我使用Instrument I挖掘对象分配时,得到如下输出:
GeneralBlock-9437184, Net Bytes 9437184, # Net 1
GeneralBlock-192512, Net Bytes 2695168, # Net 14
等,适用于较小尺寸。当我详细查看这些内容时,它们被标记为由“Foundation”拥有并通过NSConcreteMutableData initWithCapacity创建。在HTTP上传期间,我正在使用NSMutableData创建一个帖子体,所以我猜这些是我创建NSMutableData对象时Cocoa为我缓存的缓冲区。
有没有办法强迫Cocoa释放这些?我90%肯定我正确发布(而且Instruments和MallocDebug似乎证实了这一点),但我认为Cocoa因为我正在分配这么多MSMutableData缓冲区而保持这些原因。
答案 0 :(得分:0)
如果您确定自己正在释放自己拥有的物品,那么您可以(或应该)做任何事情。正如Instruments所说,这些块是由Foundation拥有的,因为基础对象NSConcreteMutableData
创建了它们。这些可能是NSData
故意保留的某种缓存,但是无法知道它们是什么。
如果您认为这是一个错误,则应在http://bugreport.apple.com报告。内存所有权规则也适用于不能很好地管理内存的类。
此外,这可能是一个愚蠢的问题,但您使用哪个选项用于Object Alloc工具?创建或创建的所有对象仍然存在?您可能正在查看无关紧要的分配。