के साथ मेमोरी लेना मैं एक दीवार के खिलाफ अपना सिर मार रहा हूं, यह पता लगाने की कोशिश कर रहा हूं कि कोको ऐप एकत्र किए गए कचरे में मेमोरी लीक कैसा था। (गतिविधि मॉनिटर में स्मृति उपयोग बढ़ता और बढ़ता है, और जीसी मॉनीटर उपकरणों का उपयोग करके ऐप चलाने से भी एक बढ़ता हुआ ग्राफ दिखाई देगा।)कोको कचरा संग्रह
अंत में मैंने इसे अपने कोड में एक पैटर्न में संकुचित कर दिया। डेटा को एनएसडीटा में लोड किया जा रहा था और फिर सी पुस्तकालय द्वारा पार्स किया गया था (डेटा के बाइट्स और लंबाई इसमें पारित की गई थी)। सी लाइब्रेरी में कॉलबैक हैं जो उप-स्ट्रिंग प्रारंभ पॉइंटर्स और लम्बाई (आंतरिक प्रतिलिपि से बचने के लिए) को आग और वापस लाएंगे। हालांकि, मेरे उद्देश्यों के लिए, मुझे उन्हें एनएसएसटींग्स में बदलने और थोड़ी देर के आसपास रखने की आवश्यकता थी। मैंने एनएसएसटींग के initWithBytes का उपयोग करके ऐसा किया: लंबाई: एन्कोडिंग: विधि। मुझे लगता है कि बाइट्स कॉपी करेंगे और एनएसएसटींग इसे उचित तरीके से प्रबंधित करेंगे, लेकिन कुछ गलत हो रहा है क्योंकि यह पागल की तरह लीक है।
इस कोड "रिसाव" या किसी भी तरह कचरा कलेक्टर चाल करेंगे:
- (void)meh
{
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"holmes" ofType:@"txt"]];
const int substrLength = 80;
for (const char *substr = [data bytes]; substr-(const char *)[data bytes] < [data length]; substr += substrLength) {
NSString *cocoaString = [[NSString alloc] initWithBytes:substr length:substrLength encoding:NSUTF8StringEncoding];
[cocoaString length];
}
}
मैं इस घड़ी में गतिविधि मॉनिटर के साथ साथ ही रख सकते हैं और सिर्फ स्मृति के उपयोग को देखने के ऊपर जाना और जीसी मॉनिटर साधन के साथ के रूप में । (holmes.txt 594 केबी है)
यह दुनिया में सबसे अच्छा कोड नहीं है, लेकिन यह समस्या दिखाता है। (मैं 10.6 चला रहा हूं, परियोजना 10.5 के लिए लक्षित है - अगर यह मायने रखती है)। मैंने कचरा संग्रहण दस्तावेज़ों पर पढ़ा और कई संभावित नुकसान देखा, लेकिन मुझे नहीं लगता कि मैं यहां नियमों के खिलाफ कुछ भी कर रहा हूं। हालांकि, पूछने के लिए चोट नहीं है। धन्यवाद!
यहां केवल बढ़ रही है और बढ़ रही वस्तु ग्राफ की एक तस्वीर है:
जब मैं इसे चलाता हूं तो मैं किसी भी रिसाव को देखने में सक्षम नहीं हूं, यह कई मिनट चलने के बाद 7.5 एमबी और 9 एमबी मेमोरी उपयोग के बीच हो जाता है। –
यह अजीब है। मैं 10.6.2 पर हूं। मैं डीबग और रिलीज में बनाया गया। मैं सभी मामलों में हमेशा बढ़ती-स्मृति देखता हूं। wtf ... – Sean
अब मेरे पास 10.5 रन पर कोई और है, और वह रिपोर्ट करता है कि यह उसके लिए बढ़ रहा प्रतीत नहीं होता है। मुझे कोशिश करने के लिए किसी और को 10.6+ पर प्राप्त करने की आवश्यकता है। – Sean