这个牵扯到Sprite的计数和渲染机制,cocos2d采用的是引用计数,这个是最基本的,除了手动retain当然如果已经被layer->addchild调用了,他会自动retain一次,直到你手动release,但是如果没有被调用,而你又忘了retain,最后报错了,又不是空,这个看哪呢?
这个就需要看哪个m_pobTexture是不是为空了
这个是正常的状态,而下面这个则是没有retain但是却直接调用了的状态
没有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的一个方法,因为如果这个出错的时候,有的时候报错并不是地址为空,但是还是崩溃,所以特别坑爹
版权属于:东哥笔记 - DongGe.me
本文链接:https://dongge.org/blog/75.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!