2012-10-29 13 views
8

मैंने अपने ऐप्स में जीसीडी या बहुत थ्रेडिंग का उपयोग नहीं किया है, लेकिन मैंने ऐसी परिस्थिति में भाग लिया है जहां मुझे एक विधि या दो थ्रेड से दो चलाने की आवश्यकता है। एक बार यह विधि पूरी होने के बाद मुझे कॉलबैक से मुख्य धागे का उपयोग करके एक और विधि कॉल करने की आवश्यकता होती है। मैं यह देखने के लिए चारों ओर खोज कर रहा हूं कि थ्रेड ने ऑपरेशन कब समाप्त किया है, लेकिन इस विषय पर अभी भी स्पष्ट नहीं है।कॉलबैक विधि के साथ आईओएस ग्रांड सेंट्रल डिस्पैच

मैंने एक परीक्षण ऐप बनाया और त्वरित उदाहरण के लिए दृश्यडिडलोड विधि का उपयोग किया।

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
     NSLog(@"viewDidLoad called"); 
     sleep(5); // simulating a thread being tied up for 5 seconds 


     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self callbackMethod]; // method called after above thread has completed running 
     }); 

    }); 


} 

क्या यह उदाहरण मैं जो करने की कोशिश कर रहा हूं उसके लिए काम करेगा? एप्लिकेशन चलाते समय ऐसा प्रतीत होता है कि नींद के बाद कॉलबैक विधि को कॉल किया जाता है (5) खत्म होता है। क्या यह इस स्थिति को संभालने का सही तरीका है या मैं निश्चित रूप से रास्ता बंद कर रहा हूं?

+2

हाँ, ऐसा लगता है कि इसे ठीक काम करना चाहिए। – geraldWilliam

+0

दोस्तों त्वरित प्रतिक्रियाओं के लिए धन्यवाद! अतिरिक्त लिंक के लिए @matt धन्यवाद। बहुत सराहना की! – tg2007

उत्तर

6

आप जगह पर हैं; यह मुख्य थ्रेड पर उतरने के लिए मानक पैटर्न है। मेरा उत्तर यहाँ देखें: https://stackoverflow.com/a/13080519/341994

और मेरी किताब, यह बहुत की संरचना भी से उदाहरण कोड के लिए:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch25p868mandelbrotGCD/ch38p1106mandelbrotNoThreading/MyMandelbrotView.swift

कि उदाहरण में, कैसे drawThatPuppy समय ऐसा करने के लिए मुख्य थ्रेड बंद हो जाता है पर देखने के इंटरफेस में ड्राइंग करने के लिए गणना करने के लिए और फिर मुख्य धागे पर गणना।

संबंधित मुद्दे