我应该将NSManagedObjectModel保留在属性中供以后使用吗?

时间:2012-01-30 09:07:23

标签: iphone objective-c core-data iphonecoredatarecipes

由于我在我的model.xcdatamodeld中嵌入了获取请求,我需要一个NSManagedObjectModel实例来获取它的获取请求。所以我可以这样做:

NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
NSFetchRequest *fetchRequest = [managedObjectModel fetchRequestFromTemplateWithName:requestTemplateName
                  substitutionVariables:substitutionDictionary];

我的问题是关于managedObjectModel。我应该将它保存在财产中以便重复使用吗?或者我应该在需要时调用mergedModelFromBundles吗?

我不知道在内存/速度方面调用'[NSManagedObjectModel mergedModelFromBundles:nil]'的成本。名称“mergeModelFrom”让我觉得如果对我的应用程序中的每个请求执行操作,这会隐藏一些可能导致性能不佳的操作。这是对的吗?

1 个答案:

答案 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,因为当您实际尝试访问它时,会对此进行处理和延迟实例化。