Sprite没有retain导致出错查找

这个牵扯到Sprite的计数和渲染机制,cocos2d采用的是引用计数,这个是最基本的,除了手动retain当然如果已经被layer->addchild调用了,他会自动retain一次,直到你手动release,但是如果没有被调用,而你又忘了retain,最后报错了,又不是空,这个看哪呢?

这个就需要看哪个m_pobTexture是不是为空了

屏幕快照 2015-03-11 上午10.28.15.png

这个是正常的状态,而下面这个则是没有retain但是却直接调用了的状态

屏幕快照 2015-03-11 上午10.37.04.png

没有retain时,是空的,就是null.为什么要看这个呢?

这个就和Sprite的渲染机制有关系了,点击进入Sprite的draw函数

里面开始时这样的

CC_PROFILER_START_CATEGORY(kCCProfilerCategorySprite, "CCSprite - draw");

    CCAssert(!m_pobBatchNode, "If CCSprite is being rendered by CCSpriteBatchNode, CCSprite#draw SHOULD NOT be called");

    CC_NODE_DRAW_SETUP();

    ccGLBlendFunc( m_sBlendFunc.src, m_sBlendFunc.dst );

    ccGLBindTexture2D( m_pobTexture->getName() );
    ccGLEnableVertexAttribs( kCCVertexAttribFlag_PosColorTex );

所以如果你没有retain,这个参数m_pobTexture就是空的,就会出错,所以也是提供一个看有没有retain的一个方法,因为如果这个出错的时候,有的时候报错并不是地址为空,但是还是崩溃,所以特别坑爹

Last modification:January 1st, 1970 at 08:00 am
如果看了这个文章可以让你少加会班,可以请我喝杯可乐
已打赏名单
微信公众号

Leave a Comment