繁体   English   中英

设置框架时,“参数包含未初始化的数据”

[英]“argument contains uninitialised data” when setting frame

我是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')”错误描述。

请建议我如何解决上述问题..

提前致谢..

问题是编译器无法确定是否曾到达过if / else-if块之一,在这种情况下, labelframe仍然是未初始化的。 您可以添加其他其他内容,或者只是将labelframe初始化为CGRectZero 它不是内存错误,而是逻辑错误。

这与内存泄漏无关。 上面的代码不保证设置labelFrame ,因为它有一个if,然后是else if。 如果两个条件都不为真,则不会初始化帧。

设置默认框架或添加最终的else子句。

初始化您的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; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM