मैं कतारबद्ध ब्लॉक को फिर से शेड्यूल करने का प्रयास कर रहा हूं जो अद्यतन संचालन को संभालेगा। मुख्य लक्ष्य UI ऑब्जेक्ट्स (ऑनलाइन उपयोगकर्ता तालिका ...) को न्यूनतम मात्रा (UI अपडेट अनुरोध) के साथ अपडेट कर रहा है। (सर्वर कभी-कभी भारी मात्रा में अपडेट बारिश करता है, याय!)एक जीसीडी प्रेषण कतार से कतारबद्ध ब्लॉक को कैसे निकालें?
सादगी के लिए मुख्य परिदृश्य है;
dispatch_queue_t उदाहरण (कतार कि यूआई अद्यतन करने ब्लॉक दिए गए संभाल लेंगे) एक सीरियल प्रेषण कतार (निजी प्रेषण कतार) है
आपरेशन (यूआई अद्यतन करने ब्लॉक) टी राशि के साथ dispatch_after साथ निर्धारित है समय (प्रत्येक डेटा सेट अपडेट के लिए अद्यतन करने के बजाय, समय के भीतर अद्यतन अनुरोध एकत्रित करें और उनके लिए एक एकल यूआई अपडेट करें)
यदि हमारे डेटा सेट को अपडेट किया गया है, तो जांचें कि पहले से निर्धारित कार्यक्रम मौजूद है या नहीं। यदि हां, तो इसे dispatch_queue_t उदाहरण से अनदेखा करें। फिर समय की देरी के साथ उसी ब्लॉक को फिर से शेड्यूल करें।
इसके अलावा;
टी थोड़ी सी समय अंतराल है जो संभवतः उपयोगकर्ता द्वारा देखी जाएगी (जैसे 500 एमएस।) कोई वैकल्पिक दृष्टिकोण स्वागत है।
इसके पीछे मेरा उद्देश्य;
मैंने एंड्रॉइड हैंडलर के माध्यम से उसी तर्क को लागू किया (पोस्ट & रननेबल इंस्टेंस के साथ कॉलबैक संयोजन हटाएं) और मुझे उम्मीद है कि मैं आईओएस पर इसे प्राप्त कर सकता हूं।
संपादित करें:
रूप @Sven सुझाव NSOperationQueue के उपयोग परिदृश्य के लिए अधिक उपयुक्त है के रूप में वे एक NSOperation रद्द समर्थन करते हैं। मैं दस्तावेजों के माध्यम से skimmed और पाया;
रद्द कर रहा है संचालन एक बार एक ऑपरेशन वस्तु को प्रभावी ढंग से कतार के स्वामित्व में है और हटाया नहीं जा सकता एक ऑपरेशन कतार में जोड़ा। एक ऑपरेशन को हटाने का एकमात्र तरीका इसे रद्द करना है। आप अपनी रद्द विधि पर कॉल करके एक एकल ऑपरेशन ऑब्जेक्ट को रद्द कर सकते हैं या आप कतार ऑब्जेक्ट की cancelAllOperations विधि को कॉल करके कतार में सभी ऑपरेशन ऑब्जेक्ट्स को रद्द कर सकते हैं।
आपको केवल तभी ऑपरेशन रद्द करना चाहिए जब आप सुनिश्चित हों कि अब आपको उनकी आवश्यकता नहीं है। रद्द आदेश जारी करने से ऑपरेशन ऑब्जेक्ट को "रद्द" स्थिति में डाल दिया जाता है, जो इसे कभी भी चलाने से रोकता है। चूंकि एक रद्द किए गए ऑपरेशन को अभी भी "समाप्त" माना जाता है, इसलिए उस पर निर्भर वस्तुओं को निर्भरता को साफ़ करने के लिए उपयुक्त केवीओ नोटिफिकेशन प्राप्त होते हैं। इस प्रकार, कुछ महत्वपूर्ण घटनाओं के जवाब में सभी कतारबद्ध संचालन को रद्द करना अधिक आम है, जैसे आवेदन छोड़ने या उपयोगकर्ता विशेष रूप से रद्दीकरण का अनुरोध करने के बजाय रद्द करने का अनुरोध करते हैं।
मैं हमेशा NSOperationQueue पर एक नज़र रखना चाहता था क्योंकि इन्हें AFNetworking ढांचे में अत्यधिक उपयोग किया जाता है। धन्यवाद, यदि संभव हो, तो मैं एक उत्तर के रूप में एक नज़र डालें और चिह्नित करूंगा। –