我有这个问题。 我有一个核心数据中的图像数据库。 我获取所有图像(约80MB)并放入一个NSMutableArray。 的对象正确故障:核心数据内存使用情况和内存警告
NSArray *fetchResults = [self.managedObjectContext executeFetchRequest:request error:&error];
self.cache = [NSMutableArray arrayWithArray:fetchResults];
for (ImageCache *imageObject in self.cache) {
NSLog(@"Is fault? %i", [imageObject isFault]);
}
阅读日志,我看到的物体都正确故障 然而,使用仪器,我看到的80MB的内存使用。 我认为这就是为什么Core Data会缓存结果,并在需要时释放内存。 但是(这是我的“问题”),如果我模拟内存警告,没有任何反应! 80MB仍然存在。
看着仪器 - 分配中,80MB用于许多的malloc(例如)
图分类直播字节##生活暂时性总字节数#总体#分配(净利润/总) 0的malloc 176,00 KB 8,59 MB 50 57 18,39 MB 107%0.00,%0.00 0 Malloc 200,00 KB 8,20 MB 42 460 98,05 MB 502%0.00,%0.04 0 Malloc 168,00 KB 7,05 MB 43 19 10,17 62 MB%0.00,%0.00
这是对整个调用树的图像的链接:https://www.dropbox.com/s/du1b5a5wooif4w7/Call%20Tree.png
有什么想法?谢谢
也许核心数据在内存警告级别2上释放内存?您的方案可能产生低内存崩溃吗? – brigadir
有没有什么“魔法”来模拟内存警告等级2?或者“简单地”我必须消耗内存? – LombaX
我不知道有什么模拟方法。您应该运行另一个“沉重”的应用程序(例如Appstore),将您的应用程序保持在后台并跟踪控制台日志和仪器内存图表。在控制台中会提到'2级'警告 - 所以你应该在那个时候查看内存表。 – brigadir