3

更新

了 为什么NSData dataWithContentsOfFile行在仪器中显示泄漏?我正在使用 ARC。部署目标是 iOS 5.0

@autoreleasepool
{
    AudioPlayerAV *context = [userInfo valueForKey:@"self"];
    NSString *filepath = [userInfo valueForKey:@"filepath"];
    [context.player stop];

    //check if file is there fetch player from dict
    AVAudioPlayer *_player = nil;
    NSError *error = nil;
    NSData *filedata = [NSData dataWithContentsOfFile:filepath];

    _player = [[AVAudioPlayer alloc]initWithData:filedata error:&error]; 
    context.player = _player;
    NSLog(@"loadAndPlay error : %@",[error description]);
    context.player.numberOfLoops = (context.loop)?-1:0;
    context.player.volume = context.volume;
    [context.player play];
}
4

1 回答 1

2

有时,仪器指向错误的线,我认为这是AVAudioPlayer的泄漏。

来自:使用 ARC 从 NSURL 和 AVAudioPlayer 泄漏

看起来是 Apple 代码中的泄漏......我尝试使用两者

-[AVAudioPlayer initWithData:error:] 和 -[AVAudioPlayer initWithContentsOfURL:error:]

在第一种情况下,分配的 AVAudioPlayer 实例保留了传入的 NSData。第二种,保留传入的NSURL。

可以看到 AVAudioPlayer 对象然后创建了一个 C++ 对象 AVAudioPlayerCpp,它再次保留了 NSData

稍后,当 AVAudioPlayer 对象被释放时,NSData 被释放,但从来没有来自关联的 AVAudioPlayerCpp 的释放调用......(您可以从所附图像中看出)

检查一下,答案中附有一些仪器屏幕截图。

于 2012-12-29T19:22:45.017 回答