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