2013-05-10 10 views
5

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

हालांकि, एक मुद्दा जो आया है, यह है कि आने वाली जानकारी के आधार पर अतिरिक्त संचालन के लिए एक परिचालन मौजूद है। इसे सुलझाने की कोशिश करने से मुझे कुछ और मामूली समस्याएं हल हुईं, क्योंकि मैंने जिस समाधान पर मारा था, वह एनएसओपरेशन को उप-कार्यों के लिए अपनी कतार देना था।

समस्या यह है कि जैसे ही 'मुख्य' निकलता है, एनएसओपरेशन को 'समाप्त' के रूप में चिह्नित किया जा रहा है, भले ही उप-कतार प्रसंस्करण समाप्त हो या नहीं; मैं उस व्यवहार को कैसे ओवरराइड कर सकता हूं?

+0

लगता है जैसे आप एक [समवर्ती 'NSOperation'] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html) ढूंढ रहे हैं? –

+0

@CarlVeazey नहीं ... बिल्कुल, लेकिन ऐसा लगता है कि एक समवर्ती एनएसओपरेशन बनाने के लिए उपयोग किए जाने वाले कदम वही काम करते हैं जो मैं वास्तव में देख रहा हूं। आपको ओवरराइड करना है कि स्टार्ट विधि कैसे संभालती है समाप्त/समाप्त हो रही है, और मुझे लगता है कि मुझे वही करना है जो मुझे यहां करने की ज़रूरत है। मुझे शुरुआत को ओवरराइड करने की आवश्यकता है ताकि यह सेट न हो, तत्काल मुख्य सिरों को समाप्त कर दिया जाए। जिसका मतलब है कि जब मैं उन गुणों को बदलता हूं, तो केवीओ सामान को संभालना, ओह खुशी। – RonLugge

+0

@ कोडाफ़ी मुझे यकीन नहीं है कि मैंने खुद को स्पष्ट कर दिया है, लेकिन आपके द्वारा सुझाए गए उत्तर को समझ में नहीं आता है। निर्भरता एक ऑपरेशन को निष्पादित करने से रोकती है, वे निष्पादन शुरू होने के बाद इसे खत्म होने से नहीं रोकते हैं। कम से कम, संदर्भ यही कह रहे हैं। – RonLugge

उत्तर

1

आप अपने ऑपरेशन मुख्य विधि से बाहर निकलने से पहले अपने बच्चे की कतार में waitUntilAllOperationsAreFinished संदेश भेज सकते हैं। यह आसान है, लेकिन एक अच्छा विचार नहीं है क्योंकि यह एक पूरे धागे को अवरुद्ध करता है जो बदनामीपूर्ण है।

एक बेहतर समाधान निर्भरता प्रणाली का उपयोग करना होगा। एक और ऑपरेशन बनाएं जो आपके मुख्य ऑपरेशन पर निर्भरता रखता है। अपने बच्चे के संचालन के निर्माण के बाद भी उन्हें उस नए 'परिष्करण' ऑपरेशन की निर्भरता के रूप में जोड़ें।

1

जैसे ही 'मुख्य' बाहर निकलता है, NSOperation 'समाप्त' के रूप में चिह्नित किया जाना है,

यह तर्क [NSOperation start] में कार्यान्वित किया जाता है, तो आप सिर्फ अपने कस्टम तर्क के साथ ओवरराइड करने के लिए है जा रहा है : main पर कॉल करना, जो कुछ अतिरिक्त परिचालनों को जन्म देता है, जो परिचालन के बाद राज्य isFinished सेट करने के बाद।

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