2014-03-06 59 views
3

我是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. 

我得到「合格按值結構參數包含未初始化數據(例如,經由現場鏈:‘origin.x’)」的錯誤描述。

請建議我該如何解決上述問題..

在此先感謝..

+0

您使用ARC? – Aly

+0

@Aly ...是的我正在使用ARC。 – Vidhyanand

回答

1

初始化您CGRect labelframe;這樣

CGRect labelframe = CGRectMake(0, 0, 0, 0); 

CGRect labelframe = CGRectZero; 

或添加其他條件如下面將解決你的問題

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; 
+0

ThankQ @rajesh。它解決了我的問題.. – Vidhyanand

1

這是無關的內存泄漏。上面的代碼不保證設置labelFrame,因爲它有一個if,那麼一個else if。如果兩個條件都不成立,則幀將不會被初始化。

設置默認框架或添加最後的else子句。

+0

ThanQ @jrturton爲你的答案.. – Vidhyanand

2

問題是,編譯器無法確定if/else-if塊之一是否已達到,在這種情況下,labelframe仍將被初始化。您可以添加其他人或只需初始化labelframeCGRectZero。這不是內存錯誤,而是邏輯錯誤。

+0

ThanQ @samir ... – Vidhyanand

+0

@samir上面的評論是錯誤的。因爲有一個'else'子句,編譯器可以100%確信labelframe會得到一個值。問題是你需要使用以下代碼正確初始化labeframe:CGRect labelframe = ... –