2012-03-18 9 views
18

मेरे ऐप में मेरे पास स्क्रॉल व्यू और चार टेबल दृश्य हैं। प्रत्येक बार जब कोई खींचा जाता है और फिर जारी किया जाता है, तो मुझे 48 बाइट रिसाव मिलता है। यह वास्तव में जोड़ता है। जैसा कि आप देख सकते हैं, लीक के दोनों समूहों का एक ही स्रोत है। क्या किसी ने पहले इस तरह एक रिसाव देखा है?प्रत्येक बार UIScrollView जारी होने पर मेमोरी लीक




संपादित करें 1:

जब मैं अगले रिसाव के लिए तीर पर क्लिक करें, मैं रिसाव के लिए इस जानकारी को प्राप्त:

उत्तर

28

जो आप देख रहे हैं वह आईओएस 5.1 में एक ज्ञात बग है और आईओएस डेवलपर मंचों में इस तरह चर्चा की जा रही है। आप "strdup" के लिए फ़ोरम में खोज करके प्रासंगिक धागा पा सकते हैं। "एलिमेंट्स ऐप मेमोरी लीक" शीर्षक वाला धागा देखें। एक ऐप्पल कर्मचारी से पोस्ट के लिए खोजें।

+0

आह, मैं देखता हूं। ऐसा लगता है कि इस अंत में कुछ भी नहीं किया जा सकता है। जवाब के लिए धन्यवाद! –

+0

निश्चित रूप से, स्टैक सब कुछ है ... जवाब मिल रहा है! –

0

सबसे अधिक संभावना है, यह आपकी गलती है, किसी भी तरह।

आवंटन उपकरण में, "i" बटन दबाएं और "रिकॉर्ड संदर्भ संख्या" चालू करें। फिर उपकरण आपको सभी आवंटन, रखरखाव, autorelease दिखा सकते हैं, और उन वस्तुओं के साथ हुई घटनाओं को छोड़ सकते हैं। (आपको प्रत्येक लीक किए गए आइटम के बगल में एक तीर देखना चाहिए - उस ऑब्जेक्ट के आवंटन इतिहास को दिखाने के लिए इसे क्लिक करें।)

मुझे लगता है कि आप पाएंगे कि आपका कुछ कोड कुछ बनाए रख रहा है, या परोक्ष रूप से इसे बनाए रखा। शायद अनुमान के रूप में, स्क्रॉल व्यू या उसके इशारा पहचानकर्ताओं में से एक।

+0

रिकार्ड संदर्भ गिनता चालू होता है, लेकिन मैं कैसे आवंटन के भीतर से लीक वस्तुओं देखते हैं? मैं लीक्स (डुह) में लीक ऑब्जेक्ट देख सकता हूं, लेकिन मैं नहीं देख सकता कि उन्हें कहां रखा/जारी/ऑटोरेलेज्ड किया गया था। –

+0

मैंने बस उपकरण में "लीक्स" प्रीसेट का उपयोग करके एक्सकोड 4.3.1 का उपयोग करके यह कोशिश की। रिकॉर्ड संदर्भ संख्या पहले ही चालू हो चुकी थी। लीक ऑब्जेक्ट्स की सूची में, "पता" कॉलम में, एक तीर आइकन होता है - उस पते का इतिहास दिखाने के लिए उस पर क्लिक करें। यदि तीर दिखाई नहीं दे रहा है, तो सबसे अच्छा मैं सुझाव दे सकता हूं कि उपकरण में सेटिंग्स के साथ खेलना है। –

+0

इसे मिला, लेकिन जानकारी बहुत उपयोगी नहीं है। मेरे परिणामों में संपादन। –

0

का संभावित हल:

मैंने महसूस किया कि किसी भी तरह इस लीक बाइट्स scrollview के भीतर जमा हो जाती है। आपको अपना स्क्रॉलव्यू जारी करना होगा और समय-समय पर इसे अपने राज्य को बनाए रखना होगा। स्क्रॉलव्यू को फिर से लोड करने के दौरान आपको पता चलने का तरीका आपके ऊपर है, आपकी ऐप आवश्यकताओं पर निर्भर करता है। हर बार जब आप स्क्रॉलव्यू जारी करते हैं, तो इन बाइट्स भी जारी किए जाते हैं।

+0

नहीं, मुझे स्क्रॉल दृश्य और तालिका दृश्य मिलते हैं जो समय-समय पर आवंटित और dealloc'd हैं, और यह रिसाव को ठीक नहीं करता है। समाधान आईओएस में आधिकारिक फिक्स के लिए बस इंतजार कर रहा है। –

0

वर्कअराउंड: मैंने पाया कि स्मृति रिसाव हैंडल में हुई है: यदि UIScrollView प्रतिनिधि सेट है। मुझे प्रतिनिधि विधियों की आवश्यकता थी, इसलिए मैंने UIScrollView को उपclassed, और अपना खुद का @protocol घोषित किया। तब मैं scrollview panGestureRecognizer के लिए लक्ष्य चयनकर्ता overrode, यह सुपर के लिए भेजने के बिना:

//yourScrollView.h 
@protocol yourScrollViewDelegate 
-(void)yourProtocol; 
@end 

//yourScrollView.m 
-(void)handlePan:(id)sender{ 
    [yourDelegate yourProtocol]; 
} 
संबंधित मुद्दे