SimpleAudioEngine Cocos2d泄漏内存

时间:2011-03-08 16:14:28

标签: cocos2d-iphone simpleaudioengine

我正在运行Instruments,它表明SimpleAudioEngine正在泄漏内存。屏幕截图已附上。尽管屏幕截图仅显示一个实例,但内存泄漏是多次。 enter image description here

此外,有时它指向以下实现(我的代码):

-(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降低并使游戏变得越来越慢!

2 个答案:

答案 0 :(得分:2)

来自cocosdenshion FAQ

  

我应该保留/释放什么?

     

SimpleAudioEngine,CDAudioManager和   CDSoundEngine API都可以访问   通过共享的单例实例。   这是一种常用的模式   整个Cocoa Touch和cocos2d。   共享实例不应该是   保留或释放。

     

如果你需要完全关闭   CocosDenshion并释放所有资源   它正在使用然后调用end方法   在最高级别的API上   使用。 例如,如果您正在使用   SimpleAudioEngine然后只需调用   [SimpleAudioEngine end]

     

如果你使用CDSoundSource对象   必须通过其中一个获得它们   工厂方法如   soundSourceForFile。 CDSoundSource   返回的是自动释放的   意味着你想在外面使用它   你当前方法的范围   必须保留它。如果你保留一个   CDSoundSource你应该发布它   当你使用完毕后。

答案 1 :(得分:0)

你使用模拟器来运行泄漏工具吗? 我在模拟器中遇到相同的泄漏但在设备上没有。 尝试使用设备运行泄漏工具