2014-04-30 6 views
5

आईओएस में, मैं वर्तमान दृश्य नियंत्रक से पिछले में पॉप करता हूं, लेकिन यह डेलोक में नहीं जाता है।आईओएस - व्यू कंट्रोलर डेलोक विधि को पिछले दृश्य पर पॉप करने के बाद नहीं बुलाया गया नियंत्रक

ऐसा इसलिए है क्योंकि वर्तमान दृश्य नियंत्रक की ओर इशारा करते हुए एक और सूचक है, या तो एक अलग दृश्य नियंत्रक या वर्तमान में?

यह वह जगह है जहाँ मैं पिछले दृश्य पर पॉप:

- (IBAction)fileUploadCancelTouched:(UIButton *)sender { 

    [self.fileToUpload cancel]; 

    [self.view hideToastActivity]; 
    [self.greenprogressBar removeFromSuperview]; 
    [self.subView removeFromSuperview]; 
    self.fileUploadCancelButton.hidden = YES; 
    if (self.commandComeBackToFinalScreen == 1) { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 

यह मेरा dealloc समारोह है:

- (void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 

    self.greenprogressBar = nil; 
    self.fileUploadCancelButton = nil; 
    self.fileToUpload = nil; 
    [buttonHome_ release]; 
    [buttonTestMeAgain_ release]; 
    [buttonMarkMyTest_ release]; 
    [examId_ release]; 
    [sender_ release]; 
    self.ob = nil; 
    [_fileUploadCancelButton release]; 
    [super dealloc]; 
} 
+0

कृपया अपने प्रश्न को बेहतर ढंग से समझने के लिए कुछ कोड प्रदान करें। –

उत्तर

6

चेक करें कि एआरसी अपनी परियोजना में सक्षम नहीं है, बनाने के लिए। यदि यह एआरसी सक्षम नहीं है तो तब तक डेलोक को तब तक कॉल किया जाना चाहिए जब तक कि आपका कोड आपके व्यू कंट्रोलर को बरकरार न रखे। यदि आपके पॉप कमांड स्मृति को कम करते हैं या नहीं, तो आपको Instruments tool से जांच करनी चाहिए।

कुछ अन्य कारणों के अनुसार कुछ अन्य कारण बताए जा सकते हैं जो मैं नीचे पोस्ट कर रहा हूं: स्पष्ट कारण यह है कि कुछ आपके विचार नियंत्रक को बनाए रखता है। आपको अपने कोड पर बारीकी से देखना होगा। क्या आप ऐसा कुछ भी करते हैं जो आपकी कक्षा में प्रतिनिधि का उपयोग करता है, क्योंकि वे कभी-कभी प्रतिनिधि को बरकरार रखते हैं। NSURLConnection आपकी कक्षा बनाए रखेगा, और एनएसटीमर भी करता है। आप कक्षा में कोड स्कैटर कर सकते हैं और अपनी कक्षा की बरकरार गिनती लॉग कर सकते हैं, और कहां से पता लगाने की कोशिश कर सकते हैं। कोड में अब तक दिखाया गया है कि बनाए रखना केवल 1 होना चाहिए, क्योंकि कक्षा केवल नेविगेशन नियंत्रक द्वारा ही बरकरार रखी जाती है।

इसके अलावा, इससे पहले कि आप अपना विचार पॉप करें, इसके लिए एक संदर्भ प्राप्त करें, इसे एनीमेशन के साथ पॉप करें, और उसके बाद इसे कुछ संदेश भेजें जिसमें यह बनाए रखने की गिनती रिपोर्ट करें (यह आपके द्वारा लिखी गई कुछ नई विधि होगी)। यह नई विधि अन्य चीजों को भी लॉग कर सकती है, जैसे कि इसमें कोई टाइमर जा रहा है, NSRLConnections, आदि

+0

'[NSTimer शेड्यूल टाइमर विथटाइम इंटरवल: 12 लक्ष्य: स्वयं चयनकर्ता: @ चयनकर्ता (sendTest) userInfo: nil repeats: NO]; 'क्या यह दृश्य नियंत्रक बनाए रखेगा? और यदि हां, तो क्या 'अमान्य' फ़ंक्शन इसे ठीक करेगा? – Operative

+1

@ खवार अली कृपया सिफारिश न करें कि लोग '-रेरेन काउंटी' का उपयोग करें: http://whentouseretaincount.com। –

+1

@ वैकल्पिक हां, टाइमर को अमान्य करने से उसका लक्ष्य जारी होगा। उस टाइमर विधि के लिए प्रलेखन से: 'टाइमर लक्ष्य तक एक मजबूत संदर्भ बनाए रखता है जब तक कि यह (टाइमर) अमान्य नहीं हो जाता।' –

1

सबसे पहले, [super dealloc] से छुटकारा पाएं। मुझे पता है कि यह सहज है, लेकिन दस्तावेज कहता है कि ऐसा मत करो।

मेरे अपने मामले में, मेरे पास मेरे डेलोक विधि में एक पर्यवेक्षक & टाइमर था, लेकिन यह तब नहीं चल रहा था जब टाइमर नियंत्रक के लिए एक मजबूत सूचक था।

पर्यवेक्षक & को हटाए गए एक समर्पित क्लीन अप विधि को टाइमर को अमान्य कर दिया गया। एक बार यह दौड़ने के बाद, नियंत्रक सही ढंग से हटा दिया गया था।

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