मुझे कुछ कोड मिला है जिसमें यह असामान्य नेस्टेड अनुक्रम है। सामान्य प्रतिमान यूआई को अद्यतन करने के लिए मुख्य कतार में एक प्रेषण होगा। नीचे दिखाया गया कोड, मुख्य कतार में एक अन्य प्रेषण के भीतर मुख्य कतार में एक प्रेषण घोंसला करता है।प्रेषण dispatch_async (dispatch_get_main_queue()^{}) का घोंसला का उद्देश्य क्या है?
- (void)viewDidLoad
{
// Setup some data
// Adjust UI
dispatch_async(myBackgroundQueue, ^{
while(Do_some_time_consuming_work) {
// Time consuming work goes here
if (things_are_going_slowly) {
dispatch_async(dispatch_get_main_queue(), ^{ // <- one of these two seems redundant
dispatch_async(dispatch_get_main_queue(), ^{ // <- one of these two seems redundant
stillWorkingLabel.hidden = NO; //Let user know the work is still ongoing
});
});
)
// Finish time-consuming work
}
});
}
क्या उद्देश्य है, यदि कोई dispatch_async(dispatch_get_main_queue()
घोंसले की है? यह नेस्टेड अनुक्रम ऐप में कई स्थानों पर दिखाई देता है। ऐसा लगता है कि मुख्य कतार में केवल एक प्रेषण की आवश्यकता है।
मुझे लगता है कि मैंने यहां संबंधित विषयों पर और Google खोज के माध्यम से संबंधित सभी प्रासंगिक प्रश्न पढ़े हैं, लेकिन मुझे किसी को भी दो समान प्रेषण घोंसले का सुझाव नहीं मिला है।
ऐप उपरोक्त उदाहरण में और कोड के अन्य स्थानों में अपेक्षित यूआई अपडेट के साथ अच्छी तरह से काम करता है।
अधिकांश ऐप का कोड उपरोक्त योजना के सामान्य गैर-नेस्टेड संस्करण का उपयोग करता है, और निश्चित रूप से यह भी ठीक काम करता है।
मैं इन नेस्टेड कॉल को केवल एक प्रेषण के साथ प्रतिस्थापित करने के इच्छुक हूं, लेकिन हो सकता है कि मैं यहां कुछ खो रहा हूं। किसी भी सलाह की सराहना की जाएगी।