【问题标题】:AVAudioPlayer causing memory leak? Release memory?AVAudioPlayer 导致内存泄漏?释放内存?
【发布时间】:2019-07-03 01:54:17
【问题描述】:

我的 Xcode 应用播放许多不同的音频文件。似乎存在最终导致应用程序崩溃的内存泄漏。我应该释放音频播放器的内存吗?我需要什么额外的代码来发布这些?我有大约 400 个音频文件。

NSString *file1Path = [[NSBundle mainBundle] pathForResource:@"50"ofType:@"mp3"];
NSURL *file1URL = [[NSURL alloc] initFileURLWithPath:file1Path];
file1Player = [[AVAudioPlayer alloc] initWithContentsOfURL:file1URL error:nil];
[file1Player play];

我可以添加这段代码吗?

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    [file1Player release];
    file1Player=nil;

}

【问题讨论】:

  • 感谢您的回复。 1,不,我还没有为玩家设置委托。我去做。接下来我必须正确设置file1Player.delegate = self;?我是否在每个音频播放器块中添加此语句? 2.我不想使用手动释放,但我不知道如何解决内存问题。 3. 我试过分析仪,是的,有很多泄漏,基于音频播放器设置。
  • 谢谢。我正在使用一个旧应用程序来创建一个新应用程序,但它没有打开 arc。这可能是整个问题。

标签: objective-c xcode memory-leaks avaudioplayer


【解决方案1】:

您已提议添加[file1Player release]

如果您使用自动引用计数,则不仅没有必要,而且不允许这样做。但是,如果您使用手动引用计数,这是必不可少的。但请务必指定AVAudioPlayerdelegate,否则不会调用该方法。

如果您使用手动引用计数,我建议使用 shift+command+B(或“产品”»“分析”) 执行静态分析。尤其是在手动引用计数代码中(甚至在 ARC Objective-C 代码中),这个静态分析器是一个非常有用的工具。在您解决其中发现的所有问题之前,继续进行是没有意义的。

或者,按照您的建议,更好的是,将您的手动引用计数项目转换为自动引用计数。

【讨论】:

  • 谢谢。我更改为 ARC 并删除了手动发布。我认为它解决了问题。
猜你喜欢
  • 1970-01-01
  • 2016-06-05
  • 2021-02-25
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多