当前项目中遇到这样的问题:
通过 ImageView ,create 一个已加载的纹理缓存(plist)时,会进入
void Sprite::setSpriteFrame(const std::string &spriteFrameName)
{
SpriteFrameCache *cache = SpriteFrameCache::getInstance();
SpriteFrame *spriteFrame = cache->getSpriteFrameByName(spriteFrameName);
CCASSERT(spriteFrame, "Invalid spriteFrameName");
setSpriteFrame(spriteFrame);
}
这里的断言,相信开发人员应该很了解代码结构, cache->getSpriteFrameByName(spriteFrameName); 这个方法里面已经进行过spriteFrame的判断。但是在cache>getSpriteFrameByName(spriteFrameName);内部确没出错。
先说一下现在的内存情况:因为后期大量的纹理加入项目, 我们使用的是 预加载进内存,所以现在纹理内存占用非常大,在上一个版本,和以前的项目中是没有出现这种问题的,但是现在出现了。
一个已经加载成功的纹理,当我去使用它的时候,发现这个纹理是一个空指针。 或者已经加载好的一张plist,当加载显示其中的spriteframe时,也会出现空指针,进入上面断言,或者进入
这段代码
bool Sprite::initWithTexture(Texture2D *texture)
{
CCASSERT(texture != nullptr, “Invalid texture for sprite”);
Rect rect = Rect::ZERO;
rect.size = texture->getContentSize();
return initWithTexture(texture, rect);
}
的断言中,特别是在小内存机型上很容易出现。
所以想问一下 引擎开发者,造成这种情况的原因?
是因为 内存使用达到峰值? 导致部分纹理丢失?或者其他你们 已知的情况。
谢谢,在线等。
(注:无任何纹理路径写入错误,所以不用回是否是纹理路径,或者key书写出错)