2010-09-08 9 views
6

मेरे पास NSOperationQueue है जिसमें NSOperations है (NSInvocationOperations, विशेष रूप से)। यह ऑपरेशन कुछ गणना करता है और यूआई तत्वों के अनुसार राज्यों को बदलता है (बेशक, performSelectorOnMainThread:... के माध्यम से), अक्सर एनिमेशन के उपयोग के साथ।रोकें NSOperation

मेरे यूआई में UINavigationViewController और नेविगेशन के लिए कुछ अन्य दृश्यों के लिए कुछ बटन हैं। तो उपयोगकर्ता वर्तमान दृश्य छोड़ सकते हैं, जबकि गणना/एनिमेशन अभी भी प्रगति पर हैं। और मुझे इसकी आवश्यकता है कि इसे किसी भी तरह से रोकने के लिए जब तक कि उपयोगकर्ता वर्तमान दृश्य पर वापस न आए।

मुझे मिला एकमात्र समाधान कुछ थ्रेड-सुरक्षित बुलियन ध्वज बनाना है - और इसे सभी धागे में जांचने के लिए (जैसे: ध्वज sleep_for_some_time;)। क्या कुछ बेहतर है?

उत्तर

12

प्रश्न थोड़ा अस्पष्ट है, इसलिए खेल में सभी कोड जानने के बिना कहना मुश्किल है। इसके साथ ही, मैं समस्या से संपर्क कर सकता हूं:

विकल्प 1. एनएसओपरेशन के अपने उप-वर्ग में, अपनी खुद की परमाणु केवीओ संपत्ति "रोक दिया गया" जोड़ें। ऑपरेशन के भीतर, उस संपत्ति का निरीक्षण करें और तदनुसार संभाल लें यदि यह कभी भी बदलता है।

विकल्प 2. क्या आप कभी ऑपरेशन कतार स्वयं निलंबित कर रहे हैं? यदि ऐसा है, तो उस संपत्ति को अपने परिचालनों के भीतर से देखने पर विचार करें, और यदि कोई मूल्य बदलता है तो प्रत्येक व्यक्ति स्वतंत्र रूप से कार्रवाई कर सकता है।

विकल्प 3. कतार में सभी परिचालनों को रद्द करें, और यदि दृश्य फिर से दिखाई देता है, तो बस नए परिचालनों के साथ पुनरारंभ करें।

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

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