通过xcode发现在ipad mini1设备上面多次执行jsb.AudioEngine.setFinishCallback存在内存泄漏

目前遇到这个情况,我的需求是连续不断的执行音频播放,但是在连续播放120多个音频之后,出现了内存泄漏,这是通过xcode观察到的,一旦收到内存泄漏的警告,app最后必然会崩溃,主要是jsb.AudioEngine.setFinishCallback 这一句执行的时候容易造成内存泄漏

麻烦提供更详细一点的信息,使用引擎的版本,以及崩溃时在 Xcode 中看到的堆栈信息。 @zjchal1

另外前一段时间有解决一个 audio 问题:在 iOS 上频繁开始停止音乐,概率崩溃的问题,可以看一下是否一样

https://github.com/cocos2d/cocos2d-x/issues/18597

Issue: jsb.AudioEngine.setFinishCallback 内存泄漏(xcode提示 received memory waring)
cocos2d-x version: 3.16
devices test on: ipad mini1
developing environments
Xcode version: 9.3.5

        this._audioID = jsb.AudioEngine.play2d("a1.mp3");
        if (this._audioID !== jsb.AudioEngine.INVALID_AUDIO_ID) {
            jsb.AudioEngine.setFinishCallback(this._audioID, function(id, filePath){
                this._audioID = jsb.AudioEngine.INVALID_AUDIO_ID;
                var isExist = false;
                for(var o in this.play_audios)
                {
                    if(this.play_audios[o]==filePath)
                    {
                        isExist = true;
                        break;
                    }
                }
                if(isExist==false)
                {
                    this.play_audios.push(filePath)
                }
                if(this.isStory==true)
                {
                    this.playAudioEnd();
                }
                else
                {
                    this.isPlaying = false;
                    this.clickFlag = false;
                    this.setTImgTouch(true); //设置可触摸;点击之后播放下一段音频(an.mp3)
                    this.setFImgTouch(true); //设置可触摸;点击之后播放下一段音频(an.mp3)
                }
            }.bind(this));
        }

你的联系方式我可以直接沟通吗,这样效率比较高 我的邮件是zjchal@163.com你发微信或者qq即可

cocos2d-x version: 3.16
devices test on: ipad mini1
developing environments
Xcode version: 9.3.5

this._audioID = jsb.AudioEngine.play2d(“a1.mp3”);
if (this._audioID !== jsb.AudioEngine.INVALID_AUDIO_ID) {
jsb.AudioEngine.setFinishCallback(this._audioID, function(id, filePath){
this._audioID = jsb.AudioEngine.INVALID_AUDIO_ID;
var isExist = false;
for(var o in this.play_audios)
{
if(this.play_audios[o]==filePath)
{
isExist = true;
break;
}
}
if(isExist==false)
{
this.play_audios.push(filePath)
}
if(this.isStory==true)
{
this.playAudioEnd();
}
else
{
this.isPlaying = false;
this.clickFlag = false;
this.setTImgTouch(true); //设置可触摸;点击之后播放下一段音频(an.mp3)
this.setFImgTouch(true); //设置可触摸;点击之后播放下一段音频(an.mp3)
}
}.bind(this));
}

记录在 issue,可以持续关注

https://github.com/cocos2d/cocos2d-x/issues/18963