我正在运行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降低并使游戏变得越来越慢!
答案 0 :(得分:2)
我应该保留/释放什么?
SimpleAudioEngine,CDAudioManager和 CDSoundEngine API都可以访问 通过共享的单例实例。 这是一种常用的模式 整个Cocoa Touch和cocos2d。 共享实例不应该是 保留或释放。
如果你需要完全关闭 CocosDenshion并释放所有资源 它正在使用然后调用end方法 在最高级别的API上 使用。 例如,如果您正在使用 SimpleAudioEngine然后只需调用 [SimpleAudioEngine end] 。
如果你使用CDSoundSource对象 必须通过其中一个获得它们 工厂方法如 soundSourceForFile。 CDSoundSource 返回的是自动释放的 意味着你想在外面使用它 你当前方法的范围 必须保留它。如果你保留一个 CDSoundSource你应该发布它 当你使用完毕后。
答案 1 :(得分:0)