您好,匿名用户
随意问技术百科期待您的加入

iOS6下AVAudioPlayer内存泄露

0 投票

我的视图控制器里放了一个按钮。main bundle里放了一个1.mp3,按钮每按一次就停止上次的音乐播放,开始下次音乐播放;

此代码在iOS4/5工作正常,iOS6中有严重的内存泄露。如果1.mp3有5M大,iOS6下每次播放就会有5M的内存不能释放。

我在iOS6下的使用方法错了吗?求指导

代码如下(开启ARC):

@implementation ViewController
{
    AVAudioPlayer *_player;
}

- (void)play
{
    if (_player)
    {
        [_player stop];
        _player = nil;
    }
    
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"test.app/1.mp3"];
    NSData *musicData = [[NSData alloc] initWithContentsOfFile:path];
    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:musicData error:nil];
    player.volume = 1;
    if (player)
    {
        _player = player;
    }
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(100, 100, 100, 100);
    [button setTitle:@"play" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(play) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

@end
用户头像 提问 2012年 12月1日 @ Miss Fortune 上等兵 (418 威望)
分享到:

1个回答

0 投票
 
最佳答案

苹果iOS6运行时的bug,已反馈给苹果:https://bugreport.apple.com/cgi-bin/W...

相同问题:https://devforums.apple.com/thread/16...

苹果修复之前替代方法:将data写入缓存文件,用initWithContentsOfURL:替代initWithData:

用户头像 回复 2012年 12月1日 @ Scorpio 上等兵 (220 威望)
选中 2012年 12月1日 @Miss Fortune
提一个问题:

相关问题

0 投票
1 回复 60 阅读
用户头像 提问 2012年 12月1日 @ Sivir 上等兵 (275 威望)
+1 投票
1 回复 79 阅读
+2 投票
2 回复 105 阅读
用户头像 提问 2012年 12月1日 @ Udyr 上等兵 (341 威望)
0 投票
1 回复 1 阅读
用户头像 提问 2014年 6月7日 @ mongodb 上等兵 (152 威望)
+1 投票
1 回复 30 阅读
用户头像 提问 2012年 12月1日 @ Ryze 上等兵 (293 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...