前几天发现只要UI中一加入UITextBMFont就会造成内存泄漏。今天同事终于帮我找到原因了。问题出在下面这个函数
void TextBMFont::setFntFile(const char *fileName)
{
if (!fileName || strcmp(fileName, “”) == 0)
{
return;
}
_fntFileName = fileName;
_labelBMFontRenderer->initWithString("", fileName);
updateAnchorPoint();
labelBMFontScaleChangedWithSize();
_fntFileHasInit = true;
setText(_stringValue.c_str());
}
把函数改成下面这个样子就解决了问题
void TextBMFont::setFntFile(const char *fileName)
{
if (!fileName || strcmp(fileName, “”) == 0)
{
return;
}
_fntFileName = fileName;
_labelBMFontRenderer->setFntFile(fileName);
updateAnchorPoint();
labelBMFontScaleChangedWithSize();
_fntFileHasInit = true;
setText(_stringValue.c_str());
}
没改的那个函数会导致调用两次LabelBMFont中的initWithString函数,从而造成内存泄漏