iPhone SDK发布NSString

时间:2011-03-30 11:19:13

标签: ios objective-c memory-management nsstring

我是Objective C的新手,我有一个关于内存管理的简单问题。

这是一个简单的按钮方法,可以使用UILabel中的文字更改UITextField

-(IBAction) setLabel
{
    NSString *inputText = [[NSString alloc]initWithString:myTextField.text];

    [myLabel setText:inputText];
    [inputText release];
}

此代码工作正常。但是,如果我将此代码更改为以下,

-(IBAction) setLabel
{
    NSString *inputText = [[NSString alloc]initWithString:@"some string value"];
    inputText = myTextField.text;       
    [myLabel setText:inputText];
    [inputText release];
}

然后应用程序在运行时崩溃。我必须删除行[inputText release];才能运行应用程序而不会崩溃。 据我所知,如果我用'alloc'创建了一些东西,我必须释放它。但在这里,如果我发布该字符串应用程序崩溃。有人可以解释原因吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

发布崩溃的原因是您将inputText重新分配给myTextField.text。对release的调用现在释放该字符串,而不是在setLabel的第一行分配的字符串。如果您为该分配使用另一个变量,则应该修复崩溃。

答案 1 :(得分:0)

我知道这不是您问题的直接答案,但您应该尝试使用自动释放池,而不必担心这些细节。因此,如果您编写了如下代码:

-(IBAction) setLabel
{
    NSString *inputText = [NSString stringWithString:myTextField.text];    
    [myLabel setText:inputText];
}

代码更具可读性,而且,您不负责发布inputText字符串实例。