我被困在与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