我是IOS开发和处理内存泄漏的新手。在我的项目分析项目时,我得到了一些内存泄漏。但我无法在下面的代码中解决以下逻辑错误。
CGRect labelframe;
if ([questonmod.questionType isEqualToString:@"type1"])
{
nooflinesint=questonmod.questiontext.length/20;
if (nooflinesint<1)
{
nooflinesint=nooflinesint+2;
}
else
{
nooflinesint=nooflinesint+1;
}
labelframe= CGRectMake(5, 0, cell.frame.size.width-10, nooflinesint*18);
}
else if([questonmod.questionType isEqualToString:@"type2"])
{
nooflinesint=questonmod.questiontext.length/10;
if (nooflinesint<1)
{
nooflinesint=nooflinesint+2;
}
else
{
nooflinesint=nooflinesint+1;
}
labelframe= CGRectMake(5,0,cell.frame.size.width-155,nooflinesint*16);
}
cell.questionlabel.frame=labelframe; //at this line I got below error.
我得到“通过值传递的struct参数包含未初始化的数据(例如,通过字段链:'origin.x')”错误描述。
请建议我如何解决上述问题..
先谢谢..
答案 0 :(得分:2)
问题是编译器无法确定是否曾到达过if / else-if块之一,在这种情况下,labelframe
仍未被初始化。您可以添加其他其他内容,也可以将labelframe
初始化为CGRectZero
。它不是内存错误,而是逻辑错误。
答案 1 :(得分:1)
这与内存泄漏无关。上面的代码不保证设置labelFrame
,因为它有一个if,然后是else if。如果两个条件都不为真,则不会初始化帧。
设置默认框架或添加最终的else子句。
答案 2 :(得分:1)
像这样初始化您的CGRect labelframe;
CGRect labelframe = CGRectMake(0, 0, 0, 0);
或
CGRect labelframe = CGRectZero;
或添加其他条件LIKE BELOW将解决您的问题
if ([questonmod.questionType isEqualToString:@"type1"])
{
nooflinesint=questonmod.questiontext.length/20;
if (nooflinesint<1)
{
nooflinesint=nooflinesint+2;
}
else
{
nooflinesint=nooflinesint+1;
}
labelframe= CGRectMake(5, 0, cell.frame.size.width-10, nooflinesint*18);
}
else if([questonmod.questionType isEqualToString:@"type2"])
{
nooflinesint=questonmod.questiontext.length/10;
if (nooflinesint<1)
{
nooflinesint=nooflinesint+2;
}
else
{
nooflinesint=nooflinesint+1;
}
labelframe= CGRectMake(5,0,cell.frame.size.width-155,nooflinesint*16);
}
else{
labelframe = CGRectMake(0, 0, 0, 0);
}
cell.questionlabel.frame=labelframe;