2012-01-30 53 views
0

由於我在我的model.xcdatamodeld中嵌入了獲取請求,我需要一個NSManagedObjectModel實例來從中獲取獲取請求。所以我可以這樣做:我是否可以將NSManagedObjectModel保留在屬性中供以後使用?

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

我的問題是關於managedObjectModel。我是否應該將其保留在物業中以便重複使用?或者我應該在需要時調用mergedModelFromBundles?

我不知道在內存/速度方面調用'[NSManagedObjectModel mergedModelFromBundles:nil]'的代價。名爲「mergeModelFrom」使我認爲這隱藏了一些操作,如果在我的應用程序中爲每個請求執行,那麼這些操作可能會導致糟糕的糟糕性能。那是對的嗎 ?

回答

2

蘋果模板做到這一點

- (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,因爲這是照顧和懶洋洋地實例化時,你實際上試圖訪問它。