簡體   English   中英

'>'的左操作數是垃圾值

[英]The left operand of '>' is a garbage value

當我構建並安裝我的應用程序時,我會收到以下內存警告

“'>'的左操作數是一個垃圾值”在這一行isTrue =(newLength> 20)? 否:是;

這里有什么問題。謝謝你的幫助

 (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength;
    BOOL isTrue;
    if(textField == txtFirstName){
        newLength = [textField.text length] + [string length] - range.length;
        //isTrue = (newLength > 20) ? NO : YES;
    }
    if(textField == txtLastName){
        newLength = [textField.text length] + [string length] - range.length;
        //isTrue = (newLength > 20) ? NO : YES;
    }
    if(textField == txtEmail){
        newLength = [textField.text length] + [string length] - range.length;
        //isTrue =  (newLength > 100) ? NO : YES;
    }
    if(textField == txtCompanyName){
        newLength = [textField.text length] + [string length] - range.length;
        //isTrue =  (newLength > 30) ? NO : YES;
    }
    if(textField == txtPassword){
        newLength = [textField.text length] + [string length] - range.length;
        //isTrue =  (newLength > 30) ? NO : YES;
    }
    if(textField == txtRe_EnterPassword){
        newLength = [textField.text length] + [string length] - range.length;
        //isTrue =  (newLength > 30) ? NO : YES;
    }
    if(textField == txtZipCode){
        newLength = [textField.text length] + [string length] - range.length;
        //isTrue =  (newLength > 20) ? NO : YES;
    }
    if(textField == txtCountry){
        newLength = [textField.text length] + [string length] - range.length;
        //isTrue =  (newLength > 30) ? NO : YES;
    }
    isTrue = (newLength > 20) ? NO : YES;

    return isTrue;
}

當所有if條件都失敗時,即出現問題。 如果textField不是您期望的那個集合之一。

在這種情況下, newLength永遠不會分配給,並且將是隨機垃圾值。 雖然這可能“永遠不會發生”,但靜態分析儀並未意識到這一點。

您應該初始化newLength以具有默認值,可能為零。

分析儀無法確認您的“類似開關的構造”沒有“通過”。 newLength如果所有這些情況下,如果失敗的價值可能永遠不會被設置。 那么在這種情況下,這有資格作為垃圾值。

我已對代碼進行了一些更改,我認為現在它會更好用。

(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = 0;
    BOOL isTrue = false;

    if(textField == txtFirstName){
        newLength = [textField.text length] + [string length] - range.length;
        isTrue = (newLength > 20) ? NO : YES;
    }
    else if(textField == txtLastName){
        newLength = [textField.text length] + [string length] - range.length;
        isTrue = (newLength > 20) ? NO : YES;
    }
    else if(textField == txtEmail){
        newLength = [textField.text length] + [string length] - range.length;
        isTrue =  (newLength > 100) ? NO : YES;
    }
    else if(textField == txtCompanyName){
        newLength = [textField.text length] + [string length] - range.length;
        isTrue =  (newLength > 30) ? NO : YES;
    }
    else if(textField == txtPassword){
        newLength = [textField.text length] + [string length] - range.length;
        isTrue =  (newLength > 30) ? NO : YES;
    }
    else if(textField == txtRe_EnterPassword){
        newLength = [textField.text length] + [string length] - range.length;
        isTrue =  (newLength > 30) ? NO : YES;
    }
    else if(textField == txtZipCode){
        newLength = [textField.text length] + [string length] - range.length;
        isTrue =  (newLength > 20) ? NO : YES;
    }
    else if(textField == txtCountry){
        newLength = [textField.text length] + [string length] - range.length;
        isTrue =  (newLength > 30) ? NO : YES;
    }
    else {
        isTrue = (newLength > 20) ? NO : YES;
    }

    return isTrue;
}

您的代碼可能是正確的,如果(至少)您的一個if測試始終保證通過。 但分析儀無法確定。 如果你可以說服自己,你可以忽略警告。

但是更好的想法是將這些更改為其他ifs,並將最后一個放在其中,其中是NSAssert。

嘗試[比較:b]如果a <b則返回-1,如果a == b則返回0,如果a> b則返回1。

isTrue =([newLength compare:20] == 1)? 否:是;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM