zoukankan      html  css  js  c++  java
  • 帝国塔防2充值界面闪退BUG修复总结(cocos2dx内存管理机制)

    游戏充值界面老是闪断,debug调试断点总是断在比较深的位置,也看不出哪里出错。

    后来有一次断点断在了程序创建一个提示图片的地方,于是检查代码发现了问题。

    修改之前的错误代码:

      1.创建提示的代码:

        m_loading = new NetLoading(this, callfunc_selector(IapShopLayer::downingUpdate)); // m_loading 引用计数为1

        m_loading->setPosition(ccp(1139/2.0f, 640.0f/2.0f));

        m_loading->autorelease(); // m_loading 加入自动管理池
        addChild(m_loading, 1000);

      2.移除提示的代码

        if(m_loading != NULL)
        {
          if(m_loading->getParent()!=NULL)
          {
            removeChild(m_loading,true); // m_loading 引用计数减一,为0,释放此对象
          } 
          m_loading->release(); // m_loading 对象已经不存在,报错
          m_loading = NULL;
        }

    错误原因:

    m_loading->autorelease();

    对象已经采用了自动管理的机制,就不需要手动去调用release()让引用计数减1。

    removeChild(m_loading,true);这句代码之后,自动管理机制判断此对象已经没有用了,于是让m_loading引用计数减一,此时m_loading的引用计数为0,被释放

    于是,执行m_loading->release()报错。

    总结:以后对象的内存管理一直要仔细细心,内存管理方案要么采用手动管理要么采用自动管理,但不能同时使用。(具体使用哪种内存管理方式根据实际情况来定)

    cocos2dx内存管理机制参考链接:http://blog.csdn.net/ring0hx/article/details/7946397

  • 相关阅读:
    java笔试之数字颠倒
    java笔试之取近似值
    java笔试之求int型正整数在内存中存储时1的个数
    js日期格式化Date
    【算法导论C++代码】归并排序
    Unity3D 错误nativeVideoFrameCallback的解决方法
    Unity3D脚本(MonoBehaviour)生命周期分析
    Unity3D 移动MM failed to find resource file{mmiap.xml}解
    Unity3D C#打开外部应用程序,并检测应用程序是否关闭退出
    Unity3d脚本执行顺序详解
  • 原文地址:https://www.cnblogs.com/Liyang1992/p/3951059.html
Copyright © 2011-2022 走看看