Ios AVAudioPlayer初始化&;内存管理
我在想办法- 每次使用AVAudioPlayer时,我都需要初始化一个新的AVAudioPlayer对象 我在一个视图中有10个句子对象,我希望为每个句子对象添加一个“PlayStation”方法,这样当用户点击句子时,应用程序将播放一个声音文件 我在很多视图上都需要这种行为,所以我想将该方法添加到对象类中,这样我就可以简单地调用-Ios AVAudioPlayer初始化&;内存管理,ios,memory-management,avaudioplayer,Ios,Memory Management,Avaudioplayer,我在想办法- 每次使用AVAudioPlayer时,我都需要初始化一个新的AVAudioPlayer对象 我在一个视图中有10个句子对象,我希望为每个句子对象添加一个“PlayStation”方法,这样当用户点击句子时,应用程序将播放一个声音文件 我在很多视图上都需要这种行为,所以我想将该方法添加到对象类中,这样我就可以简单地调用- [Sentence playSound]; 由于AVAudioPlayer在每次我希望使用它时都以任何方式初始化,所以我不明白为什么这会是一个更昂贵的操作 我说得
[Sentence playSound];
由于AVAudioPlayer在每次我希望使用它时都以任何方式初始化,所以我不明白为什么这会是一个更昂贵的操作
我说得对吗/这是满足这种需求的好方法吗?为什么
谢谢
Shani如果我理解正确,你希望你的
句子
对象有一个playSound
方法,该方法设置一个AVAudioPlayer
并播放声音
你当然可以这样做,但是要注意,如果你有很多句子
对象,那么你最终会创建很多AVAudioPlayer
对象。但是你可以在文件播放结束后,通过在处释放它来阻止高水位线过高
另一种方法是,在
语句
上有一个方法返回要播放的文件的URL,然后在视图控制器中有一个AVAudioPlayer
实例,在其中播放声音,并每次为正确的文件进行设置。这将是我个人建议的方法。我认为最好的解决方案是使用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库中找到它。你可以找到关于它的所有有用信息。我不明白的是,为什么每次我改变句子时,我都需要创建一个新的播放器,所以这种情况会改变?所以不管怎样,我都会有很多乐手。顺便说一句,我正在使用ARC,所以我自己不能释放我的播放器。如果你正在更改句子,那么你仍然可以像我所说的那样使用
句子
返回要播放的文件的URL/无论你正在播放的是什么资源。如果使用ARC,您可以自己释放玩家。我的意思不是发送release
消息,而是将播放器使用的ivar设置为零或类似。