我在iOs中创建了一个计算器,包括每个数字键作为单独的UIButton。
我有一个NSString
名为calcNumberString,用于保存输入计算器的数字。这样我就可以检查是否已经通过了最大数字量,并阻止用户再输入。
在我的viewDidLoad
事件中,我像这样初始化calcNumberString:
calcNumberString = [[NSString alloc] init];
当我按下数字键(例如5)时,会触发以下方法:
-(IBAction)buttonPressed5 : (id) sender
{
if(calcNumberString.length < 10)
{
calcNumberString = [calcNumberString stringByAppendingFormat:@"5"];
calcLabel.text = calcNumberString;
}
}
这很好用(我可以输入最多10位数字)....直到我按下CLEAR键:
-(IBAction)buttonPressedClear : (id) sender
{
calcNumberString = @"";
calcLabel.text = @"0"
}
它按预期清除,但在我尝试按下另一个数字键后,我得到EXC_BAD_ACCESS
或以下NSInvalidArgumentException
:
[__NSCFSet length]: unrecognized selector sent to instance 0x16c110
buttonPressClear
方法中有什么东西我做错了吗?这显然是问题,因为一切正常,直到我清除然后尝试输入新的数字。
非常感谢任何帮助。
谢谢!
答案 0 :(得分:1)
在clear按钮操作中,您将calcNumberString分配给另一个尚未保留的内存位置。一旦该方法超出范围,该字符串内存位置就会消失。
如果您想继续使用NSString,正确的代码如下:
[calcNumberString release];
calcNumberString = [@"" retain];
这样你就没有任何内存泄漏。
在评论中提到@CodaFi时,您应该使用NSMutableString。