我正在努力了解我使用Core Data遇到的问题以及一个简单的提取请求:
我需要显示一些记录,然后执行这些代码行
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Venue"
inManagedObjectContext:self.managedObjectContext]];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"id_" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[sortDescriptor release];
sortDescriptor = nil;
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptors release];
sortDescriptors = nil;
[self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
到目前为止一切都那么好,但是在仪器中我可以看到,在加载记录之前,我的内存是9mb,之后内存跳到44mb(!!)并且仍在那里。但我想从内存中释放所有记录,因为我不再需要它们了。我错过了什么?我认为Core Data在不再需要它们之后发布了这些记录。我尝试使用for-cycle来释放每个ManagedObject,但它们已经+1了,这意味着它们很快就会被释放。
答案 0 :(得分:2)
你应该发布请求 [fetchRequest release];
答案 1 :(得分:1)
如果您不再需要NSManagedObjects,可以手动将它们重新转换为fault
。即从NSManagedObjectContext中删除它们。下次需要它们时,它们将再次从持久存储中加载。
当我与服务器同步并更新对象时,我这样做是为了节省内存,但我不需要立即使用它们。
要重新出错,请使用此功能(并阅读有关其用法的API文档)
- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag