我是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
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)
| 归档时间: |
|
| 查看次数: |
1699 次 |
| 最近记录: |