【发布时间】:2013-01-10 17:59:01
【问题描述】:
编辑:将我的设备(和部署目标)从 iOS 4.3.5 更新到 iOS 5.1.1,但仍然存在同样的问题
在播放声音后释放类成员 AVAudioPlayer 以播放另一个声音时出现问题。
这似乎只是我的一个设备的问题,即运行 iOS 4.3.5/5.1.1 的 第 3 代 代 iPod Touch >.
我的运行 iOS 6 的 4th 和 5th 代设备运行良好。
[audio release];
audio = nil;
@try
{
audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if ((audio != nil) && (!error))
{
audio.delegate = (id)self;
audio.volume = gVolume/10;
[audio play];
}
else
{
[audio release];
audio = nil;
}
}
@catch (NSException *exception)
{
[audio release];
audio = nil;
}
第一次播放很好,但是当第二次执行此代码以播放另一个声音时,它会给出 EXC_BAD_ACCESS 错误,这不会发生在我的 4th/5th 生成设备。
我故意延迟释放,直到我需要播放另一个声音,以便给播放时间来执行。
尝试使用 AVAudioPlayerDelegate 但这并没有解决问题,调用也没有:
[audio prepareToPlay];
我确实在 viewDidLoad 中将 audio 初始化为 nil,并在 viewDidUnload 和 dealloc 中进行清理。
有很多内存泄漏问题,但这个版本的代码似乎已经解决了这个问题。
【问题讨论】:
-
为什么不打开 ARC 让您的生活更轻松?如果你不能打开 ARC,你可以在 Xcode Instruments 中运行它吗?
-
主要是因为我的无知。不完全确定如何将 ARC 合并到现有应用程序中,但它绝对是要研究的短名单。谢谢。
标签: ios avaudioplayer