将字符串设置为空(@“”)后NSString.length崩溃;

时间:2012-07-05 15:18:15

标签: ios

我在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方法中有什么东西我做错了吗?这显然是问题,因为一切正常,直到我清除然后尝试输入新的数字。

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

在clear按钮操作中,您将calcNumberString分配给另一个尚未保留的内存位置。一旦该方法超出范围,该字符串内存位置就会消失。

如果您想继续使用NSString,正确的代码如下:

[calcNumberString release];
calcNumberString = [@"" retain];

这样你就没有任何内存泄漏。

在评论中提到@CodaFi时,您应该使用NSMutableString