Могу ли я сохранить NSManagedObjectModel в свойстве для дальнейшего использования?

Поскольку я включил запрос на выборку в мой model.xcdatamodeld, мне нужен экземпляр NSManagedObjectModel, чтобы получить запрос на выборку от него. Так что я могу сделать:

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

У меня вопрос по поводу managedObjectModel. Должен ли я держать его в собственности для повторного использования? или я должен вызвать mergedModelFromBundles, когда это необходимо?

Я не знаю стоимость вызова '[NSManagedObjectModel mergedModelFromBundles: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, чего ты хочешь.

Обратите внимание, что это написано в получателе, так что вам не нужно беспокоиться о том, чтобы не забыть создать экземпляр managedObjectModel как это заботится и лениво создается, когда вы на самом деле пытаетесь получить к нему доступ.

Другие вопросы по тегам