加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-x 内存管理

发布时间:2020-12-14 19:11:29 所属栏目:百科 来源:网络整理
导读:调用了autorelease的对象,将会在自动回收池释放的时候被释放一次。 因为这个操作发生在 mainLoop drawScene()后, 这时候游戏中所有的逻辑已经执行完毕,正是释放无效资源的最佳时机。 所以一个对象被create后, 将被放进pool中,其ref 数为1, 当游戏整个


调用了autorelease的对象,将会在自动回收池释放的时候被释放一次。 因为这个操作发生在mainLoop drawScene()后,这时候游戏中所有的逻辑已经执行完毕,正是释放无效资源的最佳时机。

所以一个对象被create后, 将被放进pool中,其ref 数为1, 当游戏整个逻辑跑完,如果没有增加retain操作,注意retain有很多地方可以调用,比如addChild 等,那么pop操作,将会使得它的ref 数变为0, 从而触发delete 销毁操作。
由于这个原因,autorelease 可以保证对象在当前帧结束前不会被销毁。 而release操作则是立即执行的。
CCObject* factoryMethod()
{
CCObject* ret = new CCObject();
// 在这里对ret对象进行必要的初始化操作
return ret;
}
这里的原因在于对ret的引用在函数返回前已经结束,所以必须添加ret->autorelease(); 将引用保存在一个pool中,这样可以保证在自动回收池释放前不会被真正释放掉的。 因为池中保存了一个有效的引用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读