मैं AVAudioPlayer से संबंधित कुछ अजीब स्मृति रिसाव समस्या पर फंस गया हूं और मुझे दिमाग में आने वाली हर चीज की कोशिश करने के बाद सहायता चाहिए।AVAudioPlayer मेमोरी लीक
यहां समस्या का संक्षिप्त विवरण दिया गया है - कोड ठीक बाद में दिखाई देता है। मैं अपने खिलाड़ी को आरंभ करता हूं और एक अंतहीन पाश में ध्वनि ट्रैक चलाने के लिए शुरू करता हूं (और अंतहीन लूप या एक बार खेलने में समस्या नहीं बदली)। संगीत शुरू होने के कई सेकंड बाद, मैं एक और ध्वनि ट्रैक पर स्विच करता हूं, इसलिए मैं एक नया खिलाड़ी बनाता हूं, इसे शुरू करता हूं, पुराना एक (जो खेल रहा है) जारी करता है और फिर नया स्थान सेट करता है और इसे चलाता है।
उस समय पर (नए खिलाड़ी को कॉल करने के ठीक बाद - [प्लेयर प्ले]) मुझे मेमोरी लीक (3.5 केबी) मिलती है।
मैंने कोशिश की है:
वर्ष खिलाड़ी बंद करो और फिर उसे छोड़ दें - कोई प्रभाव नहीं
रिलीज प्लेयर सही खेलने अनुदेश के बाद - खेलना शुरू नहीं किया था
पुराने खिलाड़ी को दो बार रिलीज़ करें - क्रैश
मेमोरी लीक तब नहीं होता जब मैं बना और खेलता हूं पहला खिलाड़ी!
इसके अलावा, संदर्भ में यह कहा गया है कि 'चलाएँ' पर async है और इसलिए शायद इसे 1 से रेफरी गिनती बढ़ जाती है, लेकिन इस मामले में, क्यों [प्लेयर रोक] नहीं था मदद?
- (void) loadAndActivateAudioFunction {
NSBundle *mainBundle = [NSBundle mainBundle];
NSError *error;
NSURL *audioURL = [NSURL fileURLWithPath:[mainBundle pathForResource: Name ofType: Type]];
AVAudioPlayer *player = [(AVAudioPlayer*) [AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];
if (!player) {
DebugLog(@"Audio Load Error: no Player: %@", [error localizedDescription]);
DuringAudioPrep = false;
return;
}
[self lock];
[self setAudioPlayer: player];
[self ActivateAudioFunction];
[self unlock];
}
- (void) setAudioPlayer : (AVAudioPlayer *) player {
if (Player)
{
if ([Player isPlaying] || Repeat) // The indication was off???
[Player stop];
[Player release];
}
Player = player;
}
- (void) ActivateAudioFunction {
[Player setVolume: Volume];
[Player setNumberOfLoops: Repeat];
[Player play];
DuringAudioPrep = false;
}
:धन्यवाद,
यहाँ कैसे मैं इसका इस्तेमाल के बारे में कोड के कुछ हिस्से हैं
उत्तर के लिए धन्यवाद। हाँ - मैंने सत्यापित किया है कि यह उपकरण के साथ AVAudioPlayer है। विधि के रूप में - मैं इसका उपयोग करता हूं क्योंकि मैं वास्तव में अलग-अलग ट्रैक सहेजता हूं और नाम मिलान करके उन्हें पुन: उपयोग करता हूं और यदि वे नहीं खेल रहे हैं (एक ही ट्रैक को कई बार डाउनलोड करने के बजाय)। चूंकि मुझे पता है कि मैं उस पर 'एलोक' करने के बाद कॉलर से प्लेयर प्राप्त करता हूं, मुझे पता है कि यह पहले से ही बरकरार है (जब तक मुझे यह गलत न हो?) – Adi