更新
为什么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];
}
答案 0 :(得分:1)
有时,乐器指向错误的行,我认为this中的AVAudioPlayer泄漏。
来自:Leak from NSURL and AVAudioPlayer using ARC
看起来是Apple代码中的泄漏...我尝试使用两者
- [AVAudioPlayer initWithData:error:]和 - [AVAudioPlayer initWithContentsOfURL:error:]
在第一种情况下,分配的AVAudioPlayer实例保留传入的NSData。在第二个中,保留了NSURL中传递的内容。
您可以看到AVAudioPlayer对象然后创建一个C ++对象AVAudioPlayerCpp,它再次保留NSData
稍后,当AVAudioPlayer对象被释放时,NSData被释放,但是从来没有来自关联的AVAudioPlayerCpp的释放调用......(你可以从附图中看出来)
检查一下,answer附加了一些乐器截图。