我应该将 NSManagedObjectModel 保留在属性中以供以后使用吗?
Posted
技术标签:
【中文标题】我应该将 NSManagedObjectModel 保留在属性中以供以后使用吗?【英文标题】:Sould I keep NSManagedObjectModel in a property for later use? 【发布时间】:2012-01-30 09:07:22 【问题描述】:由于我在 model.xcdatamodeld 中嵌入了获取请求,因此我需要一个 NSManagedObjectModel 实例来从中获取获取请求。所以我可以这样做:
NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
NSFetchRequest *fetchRequest = [managedObjectModel fetchRequestFromTemplateWithName:requestTemplateName
substitutionVariables:substitutionDictionary];
我的问题是关于 managedObjectModel。我应该把它放在一个财产中重复使用吗?或者我应该在需要时调用 mergeModelFromBundles 吗?
我不知道在内存/速度方面调用“[NSManagedObjectModel mergeModelFromBundles:nil]”的成本。 “mergeModelFrom”这个名字让我觉得这隐藏了一些操作,如果为我的应用程序中的每个请求执行,这些操作可能会导致性能不佳。对吗?
【问题讨论】:
【参考方案1】: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
,因为当您实际尝试访问它时,它会被处理并延迟实例化。
【讨论】:
以上是关于我应该将 NSManagedObjectModel 保留在属性中以供以后使用吗?的主要内容,如果未能解决你的问题,请参考以下文章
NSManagedObjectModel 合并模型FromBundles 错误
RestKit 2.0 删除 RKManagedObjectStore 但保留 NSManagedObjectModel
任何模型中都没有 NSEntityDescriptions 声明 NSManagedObject 子类 你加载你的 NSManagedObjectModel 了吗?
+entityForName: 找不到实体名称的 NSManagedObjectModel