[英]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.