我遇到了一个与AVAudioPlayer相关的奇怪内存泄漏问题,尝试了所有能想到的方法后仍需要帮助。
以下是问题的简要描述 - 代码紧随其后。 我初始化播放器并开始循环播放声音轨道(无限循环或一次播放均未改变问题)。几秒钟后,音乐开始播放,我切换到另一个声音轨道,因此我创建了一个新的播放器,初始化它,释放旧的播放器(正在播放),然后设置新的播放器并播放。
在此时(在调用新播放器-[Player play]之后),我会出现内存泄漏(3.5Kb)。
我尝试了以下操作:
- 停止旧播放器,然后释放它 - 没有效果 - 在播放指令后立即释放播放器 - 没有开始播放 - 两次释放旧播放器 - 崩溃 - 当我创建和播放第一个播放器时,没有发生内存泄漏!
此外,在参考文献中确实提到“播放”是异步的,因此可能会将引用计数增加1,但在这种情况下,为什么[Player stop]没有帮助呢?
谢谢,
以下是我如何使用它的代码的一些部分:
以下是问题的简要描述 - 代码紧随其后。 我初始化播放器并开始循环播放声音轨道(无限循环或一次播放均未改变问题)。几秒钟后,音乐开始播放,我切换到另一个声音轨道,因此我创建了一个新的播放器,初始化它,释放旧的播放器(正在播放),然后设置新的播放器并播放。
在此时(在调用新播放器-[Player play]之后),我会出现内存泄漏(3.5Kb)。
我尝试了以下操作:
- 停止旧播放器,然后释放它 - 没有效果 - 在播放指令后立即释放播放器 - 没有开始播放 - 两次释放旧播放器 - 崩溃 - 当我创建和播放第一个播放器时,没有发生内存泄漏!
此外,在参考文献中确实提到“播放”是异步的,因此可能会将引用计数增加1,但在这种情况下,为什么[Player stop]没有帮助呢?
谢谢,
以下是我如何使用它的代码的一些部分:
- (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;
}