NSPrivateQueueConcurrencyType
ve NSMainQueueConcurrencyType
için NSManagedObjectContext
, türlerini kullanırken, aynı bağlamda nested performBlock çağrıları yapmak güvenli midir?İç içe gerçekleştirme gerçekleştirmeBlock: on NSManagedObjectContext
[backgroundContext performBlock:^{
NSFetchRequest *myRequest = ...;
__block NSArray *result= nil;
[backgroundContext performBlockAndWait:^{
results = [backgroundContext executeFetchRequest:myRequest error:NULL];
}];
}];
Aptalca görünebilir ama executeFetchRequest
aramaları saklanması yardımcıları yöntemlerin bir sürü varolan kodların var. Arayanın performBlock'u kullanıp kullanmadığına dair varsayımlarda bulunmak istemiyorum. Örneğin :
-(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: (...)];
}];
}
ben denedim ve çalışıyor. Ancak Çekirdek Veriler ve çoklu iş parçacıklarına çok dikkat etmenin (zor yoldan) öğrendim.
PerformBlock hakkında ne, bu da mı? – malhal
Bu, bu oturumda ele alınmadı. PerformBlock'u, eşzamansız olarak çağırırsanız, istekleriniz sıraya girer. –
sadece açık olmak gerekirse, OP'nin ikinci bit kodunda ne yapması iyi bir şey değil, ancak her iki yöntemde de "performBlock" varsa sorunlara neden olabilir? Buna bakmak için doğru yol bu mu? – hokkuk