एंड्रॉयड में दूसरों लोगों से मुख्य थ्रेड में कुछ कोड को चलाने के लिए कई तरीके हैं से बुला में कोड को चलाने के लिए?कैसे यूआई धागा दूसरों लोगों
dispatch_async(dispatch_get_main_queue(), ^{
});
कुछ और?
अग्रिम धन्यवाद।
एंड्रॉयड में दूसरों लोगों से मुख्य थ्रेड में कुछ कोड को चलाने के लिए कई तरीके हैं से बुला में कोड को चलाने के लिए?कैसे यूआई धागा दूसरों लोगों
dispatch_async(dispatch_get_main_queue(), ^{
});
कुछ और?
अग्रिम धन्यवाद।
पसंदीदा तरीका आजकल GCD उपयोग कर रहा है, कोड आप अपने प्रश्न में उद्धृत के साथ:
dispatch_async(dispatch_get_main_queue(), ^{
// Your code to run on the main queue/thread
});
आप GCD तुलना में एक अधिक वस्तु उन्मुख दृष्टिकोण का उपयोग कर पसंद करते हैं, तो आप भी उपयोग कर सकते हैं एक NSOperation
(एक तरह NSBlockOperation
) और इसे [NSOperationQueue mainQueue]
पर जोड़ें।
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// Your code to run on the main queue/thread
}];
यह करता dispatch_async(dispatch_get_main_queue(), …)
के रूप में काफी एक ही बात, उन्मुख किया जा रहा अधिक ऑब्जेक्टिव-सी/पू कि सादा सी GCD समारोह का लाभ दिया है, लेकिन NSOperation
वस्तुओं बनाने के लिए स्मृति को आबंटित करने की आवश्यकता होगी, की सबसे बड़ी खामी है , जबकि आप सादा सी और जीसीडी का उपयोग कर इससे बच सकते हैं।
मैं GCD का उपयोग करना चाहिये, लेकिन वहाँ अन्य तरीकों से, उन दो तरह है जो आप मुख्य थ्रेड से एक दिया वस्तु पर एक चयनकर्ता (विधि) कॉल करने की अनुमति कर रहे हैं:
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
(विधि NSObject की यह किसी भी वस्तु पर कहा जा सकता है तो)[NSRunLoop mainRunLoop]
लेकिन उन solut पर - (void)performSelector:(SEL)aSelector target:(id)target argument:(id)anArgument order:(NSUInteger)order modes:(NSArray *)modes
भेजें आयनों को जीसीडी या NSOperation
वाले के रूप में लचीला नहीं है, क्योंकि वे केवल आपको मौजूदा विधियों को कॉल करने देते हैं (इसलिए आपकी ऑब्जेक्ट में ऐसी विधि होनी चाहिए जो पहले से मौजूद है और जो आप करना चाहते हैं), जबकि जीसीडी या -[NSOperationQueue addOperationWithBlock:]
आपको मनमाने ढंग से पारित करने की अनुमति देता है कोड (ब्लॉक का उपयोग कर)।
अली सॉफ्टवेयर, बहुत धन्यवाद – pvllnspk
ध्यान दें कि '[NSOperationQueue mainQueue] 'के बजाय, आप बस' NSOperationQueue.mainQueue' लिख सकते हैं। –
आपका सभी कोड मुख्य धागे में चलता है, जब तक आप इसे अन्यथा नहीं बताते। – jrturton
इसे इंगित करने के लिए धन्यवाद, मैंने प्रश्न संपादित किया है। – pvllnspk