मैंने देखा है निम्न प्रयोग किया है:मैं dispatch_after() को पास किए गए ब्लॉक में स्वयं को कमजोर सूचक का उपयोग क्यों नहीं करूंगा?
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
//code to be executed on the main queue after delay
[self doSometingWithObject:obj1 andAnotherObject:obj2];
});
लेकिन यह ब्लॉक में कमजोर स्वयं उपयोग नहीं करना चाहिए?
__weak typeof(self) weakSelf = self;
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
//code to be executed on the main queue after delay
[weakSelf doSometingWithObject:obj1 andAnotherObject:obj2];
});
मैं जीसीडी और ब्लॉक के लिए नया हूं और सबसे सही उपयोग करने की कोशिश कर रहा हूं। इस पर किसी भी मार्गदर्शन पर बहुत धन्यवाद। ब्लॉक का उपयोग करने का
यह निर्भर करता है। क्या आपको व्यू कंट्रोलर को खारिज करने के बाद भी 'doSometingWithObject' [sic] को कॉल करने की आवश्यकता है? कभी-कभी आप करते हैं (उदाहरण के लिए शायद आप कुछ सहेज रहे हैं, मॉडल ऑब्जेक्ट अपडेट कर रहे हैं, कुछ महत्वपूर्ण नेटवर्क अनुरोध पोस्ट कर रहे हैं, जो भी हो), इस मामले में आप पूर्व वाक्यविन्यास का उपयोग करेंगे। लेकिन कभी-कभी आप नहीं करते (उदा। आप कुछ यूआई ऑब्जेक्ट को उस दृश्य पर अपडेट करना चाहते हैं जो पहले से ही खारिज कर दिया गया हो), इस मामले में आप बाद वाले का उपयोग करेंगे। – Rob
यह इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं यदि देरी होने से पहले 'स्वयं' को हटाए जाने का मौका मिलता है। पहला स्निपेट उसको रोक देगा, इसलिए ब्लॉक में कॉल हमेशा होता है जहां दूसरा व्यक्ति स्वयं को डिलीकेट किया जा सकता है और ब्लॉक कुछ भी नहीं करेगा। आम तौर पर कमजोर आत्म का उपयोग चक्र को बनाए रखने से रोकने के लिए किया जाता है लेकिन इस ब्लॉक में – dan