2013-12-18 11 views
5

मेरे पास एक मुख्य मेनू है जो एक मोडल सेग्यू के माध्यम से एक एसकेवीव/एसकेसीसीन के साथ व्यू कंट्रोलर लॉन्च करता है। मैं फिर dismissCiewControllerAnimated को कॉल करता हूं, जो ऐप को मुख्य मेनू में देता है, लेकिन मैं अभी भी SKScene से ध्वनि प्रभाव सुन सकता हूं। जब मैं एसकेएससीन को कई बार फिर से लॉन्च करता हूं तो ऐप अंततः दुर्घटनाग्रस्त हो जाता है।स्प्राइटकिट दृश्य जारी नहीं किया जा रहा है

मैंने एक हीपशॉट विश्लेषण ट्यूटोरियल (http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/) का पालन करने का प्रयास किया है, लेकिन मुझे लगता है कि कहीं भी नहीं मिल रहा है। मैंने सभी मजबूत @properties को रद्द करने के लिए सुनिश्चित किया है ...

इस मुद्दे के कारण क्या हो सकता है इस पर कोई विचार? क्या कोई कोड/स्क्रीनशॉट उपयोगी होगा, या क्या मैं इस मुद्दे को कम करने में मदद करने के लिए कोई जानकारी प्रदान कर सकता हूं?

Instruments

+2

एआरसी सक्षम? सभी मजबूत उदाहरणों की जांच करें, क्या आप उनमें से किसी को स्काव/स्केसिन या स्के व्यू कंट्रोलर इंस्टेंस के बाहर स्टोर करते हैं? एक और आम त्रुटि ग्राफ संरचनाओं के लिए एक बरकरार चक्र है, उदाहरण के लिए जब एक नोड अपने माता-पिता या भाई नोड्स में से एक के लिए एक मजबूत संदर्भ रखता है (उन कमजोर बनाओ)। एआरसी का उपयोग करते हुए – LearnCocos2D

+0

हाँ। पुन। आपका दूसरा प्रश्न, किसी भी वर्ग जिसमें मजबूत उदाहरण हैं, उन्हें देखने के लिए सेट करता हैDidUnload या dealloc, क्या वह पर्याप्त नहीं है? मैं आपके अंतिम बिंदु की जांच करने के लिए कोड में पहुंचा दूंगा। –

+0

दुर्भाग्यवश सभी बनाए रखने वाले चक्रों को ठीक करने में मुझे लगता है कि मदद नहीं मिली ... –

उत्तर

0

आप निम्न तरीके से अपने dismissViewControllerAnimated विधि कॉल लागू कर सकते हैं।

[self dismissViewControllerAnimated:NO completion:^{ 
    // release the SKScene here.... 
}]; 
+0

मैं एक नेविगेशन नियंत्रक का उपयोग नहीं कर रहा हूं, केवल मोडल सेग्यू और UIViewControllers –

+0

ठीक है उस स्थिति में आप अभी भी dismissViewController एनीमेट को कार्यान्वित कर सकते हैं: समापन ब्लॉक विधि और ब्लॉक में ऑब्जेक्ट्स को रिलीज़ करें। – ldindu

+0

रिलीज कोड देखने के दौरान ऐसा करना क्यों आवश्यक है DidUnload? –

4

प्रदान की गई जानकारी से जानना मुश्किल है। मैं आपको बता सकता हूं कि मेरे पास एक समान समस्या थी और यह एसकेएक्शन ऑब्जेक्ट से संबंधित हो गया। मैं दृश्यों के गुणों के रूप में क्रियाओं को कैश कर रहा था और फिर बच्चे नोड्स उन कार्यों को चला रहा था। मैंने पाया कि यह सुनिश्चित करना कि निकालने वाले बच्चे नोड्स ने मेरे लिए इस मुद्दे को समाप्त कर दिया है। कुछ के साथ कुछ:

-(void) willMoveFromView:(SKView *)view 
{ 
    [self.children enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
     SKNode* child = obj; 
     [child removeAllActions]; 
    }]; 

    [self removeAllChildren]; 
} 

सुनिश्चित नहीं है कि यह आप क्या सामना कर रहे हैं, लेकिन कुछ देखने के लिए हो सकता है।

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