我是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'创建了一些东西,我必须释放它。但在这里,如果我发布该字符串应用程序崩溃。有人可以解释原因吗?
提前致谢
答案 0 :(得分:2)
发布崩溃的原因是您将inputText
重新分配给myTextField.text
。对release
的调用现在释放该字符串,而不是在setLabel
的第一行分配的字符串。如果您为该分配使用另一个变量,则应该修复崩溃。
答案 1 :(得分:0)
我知道这不是您问题的直接答案,但您应该尝试使用自动释放池,而不必担心这些细节。因此,如果您编写了如下代码:
-(IBAction) setLabel
{
NSString *inputText = [NSString stringWithString:myTextField.text];
[myLabel setText:inputText];
}
代码更具可读性,而且,您不负责发布inputText
字符串实例。