मैं एक आईपैड-ऐप विकसित कर रहा हूं और मैं वर्तमान में मल्टीथ्रेडिंग के लिए सर्वोत्तम दृष्टिकोण खोजने के लिए संघर्ष कर रहा हूं। मुझे इसे सरलीकृत उदाहरण के साथ चित्रित करने दें:
मेरे पास 2 सबव्यू, एक निर्देशिका पिकर और चयनित निर्देशिका में सभी छवियों के थंबनेल वाले गैलरी के साथ एक दृश्य है। चूंकि 'डाउनलोडिंग' और इन थंबनेल जेनरेट करने में काफी समय लग सकता है, मुझे मल्टीथ्रेडिंग की आवश्यकता है ताकि दृश्य की बातचीत और अद्यतन अवरुद्ध न हो।उद्देश्य सी में सर्वश्रेष्ठ बहुप्रचार दृष्टिकोण?
यह वही है मैं पहले से ही करने की कोशिश की है:
[आत्म performSelectorInBackground: @selector (displayThumbnails :) withObject: currentFolder];
यह ठीक काम करता है क्योंकि उपयोगकर्ता इंटरैक्शन अवरुद्ध नहीं होते हैं, हालांकि जब उपयोगकर्ता पहले फ़ोल्डर लोड हो रहा है तो उपयोगकर्ता किसी अन्य फ़ोल्डर पर टैप करता है तो यह दुर्भाग्य से विफल हो जाता है। दो धागे एक ही दृश्य और चर का उपयोग करने की कोशिश कर रहे हैं जिसके परिणामस्वरूप एक-दूसरे को उचित निष्पादन में गड़बड़ हो रही है। जब उपयोगकर्ता किसी अन्य फ़ोल्डर को टैप करते हैं, तो वर्तमान में लोड होने वाले फ़ोल्डर के displayThumbnails
को निरस्त किया जाना चाहिए। मैं किसी भी तरह यह करने के लिए नहीं मिला ..
NSThreads
मैं इस कोशिश की, लेकिन लगभग एक ही समस्याओं के साथ संघर्ष किया पहली विधि के साथ के रूप में, मैं एक (आसान) जिस तरह से रद्द करने के लिए नहीं मिला चल रही विधि (हाँ, मुझे [aThread cancel]
के बारे में पता है लेकिन धागे को 'फिर से शुरू करने' का कोई तरीका नहीं मिला। हो सकता है कि मुझे NSThread
उप-वर्ग करना चाहिए और अपनी खुद की isRunning आदि विधियों को लागू करना चाहिए? लेकिन क्या कोई बेहतर तरीका या तीसरा (या यहां तक कि चौथा और पांचवां) विकल्प नहीं है जो मैं देख रहा हूं?
मुझे लगता है कि यह एक काफी सरल उदाहरण है और मुझे लगता है कि शायद NSThread
subclassing के बिना एक बेहतर समाधान है। तो आप क्या करेंगे? आपकी राय कृपया!
स्पष्ट रूप से मैं ऐसा उत्तर नहीं दे सकता जो केवल "जीसीडी" – JustSid
पढ़ता है आप इसके बारे में पूरी तरह से गलत हैं। गंभीरता से। – puzzle
देखें [यहां] (https://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html%23//apple_ref/doc/uid/TP40008091-CH102-SW2) क्यों जीसीडी बहुत अच्छा है :) या इससे भी बेहतर, डब्ल्यूडब्ल्यूडीसी सत्रों में से एक देखें :) अपने मूल मुद्दे के बारे में: रद्द करने या रोकने के कई तरीके हैं, भले ही आप थ्रेड, जीसीडी या एनएसओपरेशनक्यूयू का उपयोग कर रहे हों। आप सो सकते हैं, निलंबित कर सकते हैं, लॉक पर इंतजार कर सकते हैं, पूरी तरह से रद्द कर सकते हैं। मुझे लगता है कि NSOperationQueue आपके लिए एक अच्छा समाधान होगा क्योंकि यह स्वचालित रूप से आपको उचित कार्यान्वयन के लिए मार्गदर्शन करता है .. – puzzle