因此,我将NSManagedObjectModel保留在一个属性中以备将来使用



由于我在model.xcdatamodeld中嵌入了fetch请求,我需要一个NSManagedObjectModel实例来从中获取fetch请求

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

我的问题是关于managedObjectModel。我应该把它放在一处房产里重复使用吗?还是应该在需要时调用mergedModelFromBundles

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

苹果模板执行此

- (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,因为当您实际尝试访问它时,它会被处理并延迟实例化。

最新更新