ios - dispatch_after after dealloc issue -
MyViewController में viewDidLoad में मेरे पास केवल एक कॉल है:
- (शून्य) दृश्यडिडलोड { [सुपर व्यूडिडलोड]; // दृश्य लोड करने के बाद कोई अतिरिक्त सेटअप करें Self.isNeedToExecute = हाँ; प्रेषण_प्रारंभिक (डिस्पैच_टाइम (DISPATCH_TIME_NOW, (int64_t) (20 * NSEC_PER_SEC)), प्रेषण_आउट_मैन_क्यूउ (), ^ {[स्वयं डस सिमप्ले टिंघन्स];}); } - (शून्य) doSomeSimpleThings {यदि (! self.isNeedToExecute) {वापसी; } // कुछ सरल क्रियाएं करें - (शून्य) डेलोक {self.isNeedToExecute = NO; } इसके बाद कोड में मैं इस दृश्य नियंत्रक को पॉप करता हूं, इसलिए बिना प्रेषण के बाद dealloc को सुनिश्चित करने के लिए निष्पादित किया जाएगा। प्रश्न: 1) इस मामले में dealloc विधि को बुलाया जाएगा (जब हमारे पास प्रेषण के बाद है, जिसे कार्यान्वित किया जाना चाहिए 20 सेकंड)? 2) क्या इस विधि [self doSomeSimpleThings]; को dealloc के बाद निष्पादित किया जाएगा? संपादित करें: मैंने इस प्रश्न को पोस्ट करने से पहले कोशिश की, और डेलोक को नहीं बुलाया गया और सोचा कि यह अजीब था, इसलिए मैंने इस प्रश्न को यहां पूछा।
आपका वर्तमान कोड एक बनाए रखने के चक्र बनाता है क्योंकि आप ब्लॉक के अंदर self संदर्भ करते हैं आप स्वयं के लिए एक कमजोर संदर्भ का उपयोग कर चक्र को तोड़ सकते हैं इस तरह आपको isNeedToExecute फ्लैग की आवश्यकता नहीं है: <पूर्व> __ कमजोर id blockSelf = self; प्रेषण_प्रारंभिक (डिस्पैच_टाइम (DISPATCH_TIME_NOW, (int64_t) (20 * NSEC_PER_SEC)), प्रेषक_गेट_मैन_क्यू (), ^ {[ब्लॉक्स्ल डेल सोमसिमल टिप्स];}); अपने दृश्य नियंत्रक blockSelf है शून्य और doSomeSimpleThings के निष्कासन के बाद निष्पादित नहीं किया जाएगा। < / P>
Comments
Post a Comment