我正在 iPhone 4S 上运行 Instruments。 我在这个方法中使用 AVAudioPlayer:
-(void)playSound{
NSURL *url = [self.word soundURL];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if (!error) {
[audioPlayer prepareToPlay];
[audioPlayer play];
}else{
NSLog(@"Problem With audioPlayer on general card. error : %@ | url %@",[error description],[url absoluteString]);
}
播放声音文件时出现泄漏:
泄漏对象:
1.
对象:NSURL
负责库:Foundation
负责帧:Foundation -[NSURL(NSURL) allocWithZone:]
2.
对象:_NSCFString
负责库:Foundation
负责帧:Foundation -[NSURL(NSURL) initFileURLWithPath:]
Instruments 没有直接指向我的代码,所以我很难找到泄漏原因。
我的问题是:
什么可能导致泄漏?或者当我不负责代码时,如何定位泄漏?
编辑
这是来自 Instruments 循环视图的模式:
感谢 Shani
error
初始化为nil
,但是后面却测试了!error
。(接受NSError **
返回值的API不能保证在调用失败时设置error
。在使用error
之前,必须检查audioPlayer != nil
。你还应该将error
初始化为nil
。 - nielsbotAVAudioPlayer
实例1保留了传入的数据/URL,并创建了一个AVAudioPlayerCpp
实例,该实例也保留了传入的数据/URL。当AVAudioPlayer
被释放时,它会释放数据/URL,但我从相关的AVAudioPlayerCpp
中没有看到释放。 - nielsbot