Вложенный PerformBlock :в NSManagedObjectContext

При использовании типов NSPrivateQueueConcurrencyTypeи NSMainQueueConcurrencyTypeдля NSManagedObjectContext, Безопасно ли делать вложенные вызовы PerformBlock в одном и том же контексте?

[backgroundContext performBlock:^{
   NSFetchRequest *myRequest =...;  
   __block NSArray *result= nil;
   [backgroundContext performBlockAndWait:^{
       results = [backgroundContext executeFetchRequest:myRequest error:NULL];
   }];
}];

Это может показаться глупым, но у меня есть существующая кодовая база с множеством вспомогательных методов, которые инкапсулируют вызовы executeFetchRequest. Я не хочу делать предположения о том, использовал ли вызывающий объект PerformBlock или нет. Например,:

-(void)updateObjects:(BOOL)synchronous
{
    if (YES == synchronous)
        [self fetchHelper];
    else
    {
        [backgroundContext performBlock:^{
             [self fetchHelper];
        }];
    }
}

-(NSArray*)fetchHelper
{
     [self.backgroundContext performBlockAndWait:^{
         //Fetch the objects...
         [self.backgroundContext executeFetchRequest: (...)];
     }];
}

я пробовал, и это работает.Но я научился (трудным путем )быть очень осторожным с Core Data и многопоточностью -.

8
задан FKDev 6 May 2012 в 20:31
поделиться