由于我在我的model.xcdatamodeld中嵌入了获取请求,我需要一个NSManagedObjectModel实例来获取它的获取请求。所以我可以这样做:
NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
NSFetchRequest *fetchRequest = [managedObjectModel fetchRequestFromTemplateWithName:requestTemplateName
substitutionVariables:substitutionDictionary];
我的问题是关于managedObjectModel。我应该将它保存在财产中以便重复使用吗?或者我应该在需要时调用mergedModelFromBundles吗?
我不知道在内存/速度方面调用'[NSManagedObjectModel mergedModelFromBundles:nil]'的成本。名称“mergeModelFrom”让我觉得如果对我的应用程序中的每个请求执行操作,这会隐藏一些可能导致性能不佳的操作。这是对的吗?
答案 0 :(得分:2)
Apple模板执行此操作
- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil) {
return __managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"DiscussIt" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return __managedObjectModel;
}
这种方式只有在managedObjectModel
== nil
时才会创建,这就是您想要的。
请注意,这是在getter中编写的,因此您无需担心要记住实例化managedObjectModel
,因为当您实际尝试访问它时,会对此进行处理和延迟实例化。