现在我有一个核心数据实体“AAA”,我使用一种方法来获取其结果:
- (AAA *)result{ NSEntityDescription *Entity = [NSEntityDescription entityForName:@"AAA" inManagedObjectContext:self.managedObjectContext]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init]; [fetchRequest setEntity:aaaEntity]; NSError *error = nil; NSArray *fetchRequestResult = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; AAA *aaa = fetchRequestResult.lastObject; return aaa; }
然后我使用Xcode Instruments检查内存状态,它显示:
VM:Core Data Object IDs 4.02MB(Live Bytes)
实体是否仍然存在于内存中?
答案 0 :(得分:1)
首先,我会开始说你在处理核心数据时不应该担心内存。在框架下,框架为您管理的东西。当您检索对象时,Core Data会填充存储数据的缓存。这样,进一步的提取将不会访问磁盘而只会访问缓存。
无论如何,您可以依靠两种不同的API来控制内存占用。第一个是[context reset]
。这将清除整个对象图(属于特定上下文),就像刚刚创建它一样。
第二个是[context refreshObject:yourManagedObject mergeChanges:NO]
。它允许释放物体,或将其变成故障。
希望它有所帮助。