目标C:发布和分配

1 release objective-c alloc

我是C和Objective C的新手,但我找不到这个答案

所以我遇到了一个问题,花了我一段时间来解决问题,基本上我被告知,当你分配一个对象时,你应该释放它.这就是我所做的,它导致我的程序崩溃......

这是代码:

NSString *numberString = [[NSString alloc] init];
numberString = resultLabel.text;
[self setFirstNumber:[numberString doubleValue]];
[resultLabel setText:@"0"];
[numberString release];
Run Code Online (Sandbox Code Playgroud)

我想我弄清楚为什么它是因为"numberString = resultLabel.text"行,但我不明白为什么程序崩溃了.为什么我不能发布numberString?如果我不这样做会导致内存泄漏吗?

PS我知道代码很笨,我是编程的新手,而且是Objective C的超级新手.

PSS我稍后在 - (void)dealloc {}中发布resultLabel

Joe*_*Joe 5

numberString是一个指针,表示它将指向您指定的内存.在第一行是的,你确实调用了alloc/init,你负责释放它.在下一行,虽然您将指针设置为您不拥有的另一个值,并且您调用alloc on的原始字符串将被泄露.调用[[NSString alloc] init]是没有意义的,但这是你的发布版本.

NSString *numberString = [[NSString alloc] init]; //Not necessary
[numberString release]; //Properly released now it is safe to reassign
numberString = resultLabel.text; 
//numberString is now pointing at another object

[self setFirstNumber:[numberString doubleValue]];
[resultLabel setText:@"0"];
//No need to release it any more here
Run Code Online (Sandbox Code Playgroud)

你想要做的只是将numberString设置为文本而不使用任何释放调用.

NSString *numberString = resultLabel.text;
Run Code Online (Sandbox Code Playgroud)