我正在运行Instruments,它指示SimpleAudioEngine正在泄漏内存。截图附在附件中。虽然屏幕截图只显示了一个实例,但内存泄漏是多次的。

此外,有时它会指向以下实现(我的代码):
-(void) preloadGameSounds
{
// pre load the background sound
[[SimpleAudioEngine sharedEngine] preloadEffect:@"farm_background_sound.mp3"];
// pre load the game sounds
[[SimpleAudioEngine sharedEngine] preloadEffect:@"chickenlayingegg.mp3"];
// setup ding sound
[[SimpleAudioEngine sharedEngine] preloadEffect:@"ding.caf"];
// egg pop sound
[[SimpleAudioEngine sharedEngine] preloadEffect:@"baloonpop.wav"];
// preload applause sound
[[SimpleAudioEngine sharedEngine] preloadEffect:@"applause.mp3"];
// wrong answer sound
[[SimpleAudioEngine sharedEngine] preloadEffect:@"wrong_answer_sound.wav"];
}当改变场景时,我也会使用下面的实现来卸载声音:
-(void) unloadSoundEffects
{
[[SimpleAudioEngine sharedEngine] unloadEffect:@"applause.mp3"];
//[[SimpleAudioEngine sharedEngine] unloadEffect:@"wrong_answer_sound.wav"];
[[SimpleAudioEngine sharedEngine] unloadEffect:@"ding.caf"];
[[SimpleAudioEngine sharedEngine] unloadEffect:@"chickenlayingegg.mp3"];
}内存泄漏使得游戏的FPS越来越低,使得游戏变得越来越慢!
发布于 2011-07-04 22:15:28
从cocosdenshion FAQ
我应该保留/释放什么?
SimpleAudioEngine、CDAudioManager和CDSoundEngine API都是通过一个共享的单例实例访问的。这是一种在整个Cocoa Touch和cocos2d中使用的常见模式。不应保留或释放共享实例。
如果您需要完全关闭CocosDenshion并释放它正在使用的所有资源,那么在您正在使用的最高级别的API上调用end方法。例如,如果您使用SimpleAudioEngine,则只需调用SimpleAudioEngine end即可。
如果使用CDSoundSource对象,则必须通过工厂方法之一(如soundSourceForFile )获取它们。返回的CDSoundSource是自动释放的,这意味着如果您想在当前方法的作用域之外使用它,则必须保留它。如果您保留了CDSoundSource,则应在使用完它后将其释放。
发布于 2011-03-09 11:37:06
您是否正在使用模拟器来运行泄漏工具?我在模拟器中遇到了同样的泄漏,但在设备上却没有。尝试使用设备运行泄漏工具
https://stackoverflow.com/questions/5235123
复制相似问题