按钮上的标题更新导致iPhone应用程序崩溃

时间:2009-10-09 20:54:16

标签: iphone objective-c

我正在使用非常好的'开始IPhone开发'教自己Objective-C和Iphone开发。我一直在玩一个示例应用程序,当我按下另一个按钮时,我试图用文本字段中的文本更新一个按钮。我已经设置了我的动作和链接以及所有爵士乐。单个方法/函数/调用的代码在

之下
-(IBAction)updateButtonPressed
{
NSString *newCaption = [[NSString alloc] initWithString:@"."];

newCaption = tfUpdateText.text;
[btnPressMe setTitle:newCaption forState:UIControlStateNormal];

[newCaption release];


}  

第一次按下按钮时效果很好,然后崩溃后可能会发生两到三次。我显然做了一些非常愚蠢的事情,但我无法看到它。这是我添加的所有内容(以及声明,属性 - 合成等)。有人可以指出我明显的内存泄漏。

更新

如果我改用这个

-(IBAction)updateButtonPressed
{

[btnPressMe setTitle:tfUpdateText.text forState:UIControlStateNormal];



}  

它工作正常,但是有人可以向我解释我犯了什么错误吗?

3 个答案:

答案 0 :(得分:2)

您管理的内存不正确。什么是-initWithString:@"."?你正在生成一个常量字符串@“。”,然后泄漏它,然后指向另一个字符串(tfUpdateText.text),然后将该指针指向标题,然后释放-text对象。

这既是泄漏也是过度释放。这是过度释放的崩溃。

也许你的意思是:

-(IBAction)updateButtonPressed
{
    [btnPressMe setTitle:tfUpdateText.text forState:UIControlStateNormal];
}

答案 1 :(得分:2)

您有内存管理错误。您要发布的newCaption引用对象与您初始化的引用对象不同。您不小心泄露了您分配的NSString,而是发布了tfUpdateText.text

您可以删除如下的文本变量:

-(IBAction)updateButtonPressed
{
    [btnPressMe setTitle:tfUpdateText.text forState:UIControlStateNormal];
}

答案 2 :(得分:1)

你在这里没有正确使用NSString(并且确实做了比要求更多的工作)。 NSStrings只是指针,所以你对newCaption的第二次分配只是孤立的第一次。当您稍后发送[newCaption release]时,您不会将它发送到您的alloc'd对象,而是发送到您未保留的tfUpdateText.text。摆脱分配和释放,你应该全部设置。