我被困在與AVAudioPlayer相關的一些奇怪的內存泄漏問題上,在嘗試了所有想到的東西之後,我需要幫助。AVAudioPlayer內存泄漏
下面是問題的簡短描述 - 代碼出現後。 我初始化了我的播放器並開始在無限循環中播放音軌(無限循環或一次播放並未改變問題)。 音樂開始幾秒鐘後,我切換到另一首音軌,因此我創建了一個新的播放器,初始化它,釋放舊的(正在播放的),然後設置新的播放器並播放它。在那個時間點(在我稱爲新玩家 - [玩家玩]之後),我得到一個內存泄漏(3.5Kb)。
我試過如下:
停止老玩家,然後釋放它 - 沒有影響
版本播放器的播放指令後,正確的 - 沒有開始踢
釋放兩次舊玩家 - 崩潰
內存泄漏當我創建並播放內容時不會發生第一個玩家!
此外,在參考它說,「玩」是異步,因此它很可能通過增加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。 至於方法 - 我使用這一個,因爲我實際上保存了不同的曲目,並通過匹配名稱並且如果它們沒有播放(而不是幾次下載相同的曲目)來重複使用它們。 因爲我知道我做了一個'Alloc'後,從調用者得到玩家,我知道它已被保留(除非我錯了?) – Adi 2009-08-31 07:21:31