क्या प्रेषण रद्द करने का कोई तरीका है() भविष्य में कुछ समय के लिए निर्धारित है, और अब तक नहीं निकाल दिया गया है? मैं सर्वर से अपडेट के लिए शेड्यूलर की तरह कुछ करने की कोशिश कर रहा हूं, और यह विधि ठीक है जैसा मैं चाहता हूं, लेकिन, मुझे कुछ बिंदु पर रद्द करना और फिर से शेड्यूल करना अच्छा लगेगा। क्या यह संभव है या मुझे फॉलबैक करना होगा और एनएसटीमर का उपयोग करना होगा?dispatch_after() विधि रद्द करें?
उत्तर
प्रेषण टाइमर स्रोत का उपयोग करें (जो dispatch_after
किसी भी तरह आंतरिक रूप से उपयोग करता है)।
एक प्रेषण टाइमर स्रोत रद्द किया जा सकता है या इसके टाइमर पैरामीटर सृजन के बाद बदल गए हैं।
प्रेषण से इसे हटाने के बाद प्रेषण से रोकने का कोई तरीका नहीं है, जिसका अर्थ यह है कि आपका प्रेषण_ रद्द नहीं किया जा सकता है। केवल एक विकल्प है कि आपके ब्लॉक में निष्पादन को रोकने के लिए रनटाइम पर एक शर्त को चेक किया जाए। यानी।
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_main_queue(),^{
if(self.shouldExecuteDispatchBlock)
{ // do your stuff } });
हम्म इसलिए इस ब्लॉक के निष्पादन के लिए अगली बार आता है (और इसे रद्द करने के लिए सेट किया गया है), मुझे लगता है कि यह तब तक सभी मेमोरी/ऑब्जेक्ट्स को हॉग करेगा। शायद एक समस्या अगर आपके चक्र 60 मिनट की तरह हैं? :-) – Jonny
हां और नहीं। ब्लॉक मेमोरी की प्रतिलिपि बनाता है, जिसका अर्थ यह है कि यदि आप अपने ब्लॉक में एक इंट वैल्यू पर आते हैं, तो इसकी प्रतिलिपि बनाई जाएगी और जब तक ब्लॉक लाइव रहता है तब तक डुप्लीकेट के रूप में स्मृति में रहेगा। लेकिन वस्तु के लिए, यह उन्हें डुप्लिकेट नहीं करता है, यह एड्रेस की प्रतिलिपि बनाता है। यदि आप किसी छवि को रेफर करते हैं, तो आपके पास ढेर में एक UIImage ऑब्जेक्ट होगा, लेकिन ब्लॉक केवल पॉइंटर वैल्यू (आर्क 64 में 8 बाइट्स) बनाए रखेगा, इसलिए कोई बड़ी बात नहीं है। निश्चित रूप से जब तक ब्लॉक बाहर नहीं जाता है तब भी छवि स्मृति में बरकरार रहेगी, इसलिए यह चाप द्वारा साफ नहीं किया जाएगा। –
मैंने इसे डिस्पैच्यूयूयू के विस्तार में बदल दिया है: https://github.com/nrbrook/DispatchAfterCancellable – Nick
ठीक है, हां, तो एकत्र सभी प्रश्नों के उत्तर, और संभावित समाधानों के साथ, इस मामले (संरक्षण सादगी) performSelector:withObject:afterDelay:
बुला और cancelPreviousPerformRequestsWithTarget:
कॉल के साथ इसे रद्द करने से जब वांछित है के लिए सबसे अच्छा लगता है। - मेरे मामले में बस अगले देरी कॉल का समय निर्धारण से पहले: क्या में है के निष्पादन को रद्द करने के
https://github.com/SebastienThiebaud/dispatch_cancelable_block
आप एक रद्द कॉल कर सकते हैं() फ़ंक्शन:
[NSObject cancelPreviousPerformRequestsWithTarget: self selector:@selector(myDelayedMethod) object: self];
[self performSelector:@selector(myDelayedMethod) withObject: self afterDelay: desiredDelay];
मैंने इस पथ को शुरू किया, लेकिन क्लास विधियों के साथ कोई ऐसा कैसे करता है (यही कारण है कि मैंने 'dispatch_after' पर स्विच किया)? – Olie
@ ओली अच्छा एक। फिर आपको उन कॉलों को उदाहरण में लपेटना होगा, या प्रेषण + ध्वज का उपयोग करना होगा (अनुमान है, दूसरा आसान होगा) –
इस प्रयोजन के लिए मैं इस वर्ग के लिए प्रयोग किया जाता खंड।
यदि आप इसे स्विफ्ट में उपयोग करेंगे - तो आप इसे यहां देख सकते हैं https://github.com/katleta3000/CancelBlocks/ – katleta3000
- 1. dispatch_after NSOperationQueue
- 2. UISearchDisplayController - रद्द करें बटन के लिए विधि
- 3. रद्द करने के लिए रद्द करें टोकन
- 4. रेट्रोफिट 2 + आरएक्सजेवा रद्द/सदस्यता रद्द करें
- 5. JDialog रद्द करें बटन
- 6. निष्पादित होने से dispatch_after() पृष्ठभूमि कार्य को रोकें
- 7. UISearchBar रद्द करें बटन
- 8. लिनक्स, ब्लॉकिंग को रद्द करना रद्द करें()
- 9. विधि पोस्ट, स्थिति (रद्द) त्रुटि संदेश
- 10. वसंत रद्द करें @ एसिंक कार्य
- 11. रेल डीबी कनेक्शन रद्द करें
- 12. UISearchController में रद्द करें बटन
- 13. रद्द करें NamedPipeClientStream.Read कॉल
- 14. UIAlertView रद्द करें बटनटन
- 15. रद्द करें बटन UISearchBar
- 16. ABPeoplePickerNavigationController रद्द करें बटन
- 17. ओके/रद्द करें
- 18. UISearchBar रद्द करें बटन
- 19. jquery.load() को कैसे रद्द करें?
- 20. CanStationTaskAsync विधि को रद्द करने के लिए CancellationTokenSource कैसे संलग्न करें और async कॉल को रद्द करें?
- 21. कार्य की निरंतरता को कैसे रद्द करें?
- 22. पृष्ठभूमि कार्यकर्ता को रद्द करें
- 23. HttpListenerContext.AcceptWebSocketAsync को कैसे रद्द करें?
- 24. रद्द करें बटन और UIActionSheet
- 25. onbeforeunload इवेंट हैंडलर रद्द करें?
- 26. UIWebView को कैसे रद्द करें?
- 27. WPF ड्रैग ऑपरेशन रद्द करें
- 28. PromiseKit एक वादा रद्द करें
- 29. स्थापना रद्द करें सभी पर्ल
- 30. मार्ग रद्द करें और AngularJS
yup। ऐसा लगता है कि हमारे पास डुप्लीकेट हैं। आश्चर्य है कि क्या इस प्रश्न को मर्ज करना संभव है? –