Могу ли я оставить NSManagedObjectModel в свойстве для дальнейшего использования? - PullRequest
0 голосов
/ 30 января 2012

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

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

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

Я не знаю стоимость вызова '[NSManagedObjectModel mergedModelFromBundles: nil]' с точки зрения памяти / быстродействия.Название «mergeModelFrom» заставляет меня думать, что это скрывает некоторые операции, которые могут привести к плохой производительности при выполнении для каждого запроса в моем приложении.Это правильно?

1 Ответ

2 голосов
/ 30 января 2012

Шаблоны 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, поскольку об этом заботятся и лениво создают, когда вы фактически пытаетесь получить к нему доступ.

...