这是一个多部分的问题,主要是因为我对此事的无知是多层次的。
首先,我组装了一个用于缓存CGImageRef
对象的缓存系统。当我在后台线程中加载图像时,我将其保持在CGImageRef
水平(而不是)。UIImage
加载图像后,我将其放入NSMutableDictionary
. 我不得不做一些手臂扭转才能CGImageRef
进入数组:
//Bunch of stuff drawing into a context
CGImageRef imageRef = CGBitmapContextCreateImage(context);
CGContextRelease(context);
[(id)imageRef autorelease];
[self.cache setObject:(id)imageRef forKey:@"SomeKey"];
因此,如您所见,我试图将 Image Ref 视为NSObject
,将其设置为 autorelease 然后将其放入字典中。我的期望是这将允许从字典中删除图像后进行清理。现在,我开始怀疑了。
当用户“重新启动”以播放不同的图像时,我的应用程序会清除缓存数组。在 Instruments 中运行应用程序表明,内存在重新启动时并没有回落到“开始”级别,而是保持稳定。我的直觉告诉我,当数组删除了所有对象时,CGImageRef
并没有被清除。
但是,我无法确认这一点,因为我不太清楚如何追踪仪器中内存的实际来源。它只是一个(Malloc 16 字节、Malloc 32 字节等)的列表,钻入它们只会显示 dyld 调用者的列表。不知道如何正确阅读它。
那么,第一个问题,我缓存CGImageRef
对象的方式是否完全有缺陷?有没有更好的方法来确认仪器中的这些东西?