पर NSManagedObjectContext
के लिए NSPrivateQueueConcurrencyType
और NSMainQueueConcurrencyType
प्रकार का उपयोग कर, इसे सुरक्षित नेस्ट performBlock बनाने के लिए है उसी संदर्भ पर कॉल?नेस्टेड performBlock: NSManagedObjectContext
[backgroundContext performBlock:^{
NSFetchRequest *myRequest = ...;
__block NSArray *result= nil;
[backgroundContext performBlockAndWait:^{
results = [backgroundContext executeFetchRequest:myRequest error:NULL];
}];
}];
यह बेवकूफ लग सकता है, लेकिन मैं सहायकों तरीकों जो executeFetchRequest
कॉल संपुटित का एक बहुत साथ एक मौजूदा codebase है। मैं इस बारे में धारणा नहीं बनाना चाहता हूं कि कॉलर पहले से ही प्रदर्शन का उपयोग कर चुका है या नहीं। उदाहरण के लिए:
-(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: (...)];
}];
}
मैं इसे करने की कोशिश की है और यह काम करता है। लेकिन मैंने कोर डेटा और बहु-थ्रेडिंग के साथ बहुत सावधान रहने के लिए (कठिन तरीका) सीखा है।
प्रदर्शनब्लॉक के बारे में क्या, क्या वह पुनर्विक्रेता भी है? – malhal
ऐसा नहीं है, यह सत्र में शामिल है। यदि आप performBlock को कॉल करते हैं तो यह अनुरोध कतारबद्ध होगा क्योंकि यह async है। –
बस स्पष्ट होने के लिए, कोड के दूसरे बिट में ओपी क्या कर रहा है ठीक है ?, लेकिन यदि दोनों विधियों में "प्रदर्शनब्लॉक" था तो यह समस्याएं पैदा कर सकता है? क्या यह देखने का सही तरीका है? – hokkuk