AVAudioPlayer初始化&内存管理

时间:2012-03-22 07:37:04

标签: ios memory-management avaudioplayer

我想找出一些东西 -

每次我使用AVAudioPlayer时,我都需要初始化一个新的AVAudioPlayer对象。

我在视图上有10个 Sentence 对象,我希望为每个Sentence对象添加一个“PlaySentence”方法,这样当用户点击Sentence时,app会播放一个声音文件。

我在很多视图上都需要这种行为,所以我想把这个方法添加到对象类中,这样我就可以简单地调用 -

[Sentence playSound];

由于每次我希望使用它时,AVAudioPlayer 以任何方式初始化,我无法理解为什么这应该是更昂贵的操作。

我是对的/它是否适合这种需求以及为什么?

由于

沙尼

2 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您希望Sentence对象使用playSound方法设置AVAudioPlayer并播放声音。

你绝对可以这样做,但请注意,如果你有很多Sentence个对象,那么你最终会创建很多AVAudioPlayer个对象。但是你可以通过在文件播放完毕后释放它来阻止高水位线过高。

你可以这样做的另一种方法是让Sentence上的方法返回要播放的文件的URL,然后在你想要播放的视图控制器中只有一个AVAudioPlayer实例声音并每次为正确的文件设置它。这将是我个人建议的做法。

答案 1 :(得分:0)

我认为最好的解决方案是使用Cocos2D库中的SimpleAudioEngine。

易于使用和集成。据我所知,它使用OpenAL和AVAudioPlayer。它有简单的界面来控制背景音乐,效果和mp3,wav,m4a和其他格式和编解码器。

使用它很容易:

//  it's better to preload all effects during app start so they will play immediately when you call "playEffect" method 
[[SimpleAudioEngine sharedEngine] preloadEffect:@"sentence.m4a"];
...
//  play effect where you need it
[[SimpleAudioEngine sharedEngine] playEffect:soundName];

您可以在Cocos2D库中找到它here。您可以找到有关它的所有有用信息here