释放我完成的NSString会导致崩溃

时间:2011-06-07 19:44:51

标签: objective-c cocoa memory-management nsstring

请注意下面注释掉的[printvolfirst release];行。如果我取消评论,程序会崩溃。我无法弄清楚为什么。除了您在此处看到的代码行之外,printvolfirst变量不会在其他任何地方使用。在将其分配给printvol后,我完成了它。那么为什么不发布呢?

vol = vol / 1000000;
NSNumberFormatter * format = [[NSNumberFormatter alloc] init] ;
[format setPositiveFormat:@"#.#"];
NSString * printvolfirst = [[NSString alloc]init];
printvolfirst = [format stringFromNumber:[NSNumber numberWithFloat:vol]];

NSString * printvol = [[NSString alloc] initWithFormat: @"%@M", printvolfirst];

self.Pop.vol.text = printvol;
[printvol release];
//[printvolfirst release];
[format  release];

2 个答案:

答案 0 :(得分:3)

stringFromNumber:自动释放返回的对象。如果再次释放它,它将在解除分配后释放。

实际上,您甚至不需要此代码:

NSString*printvolfirst=[[NSString alloc]init];

您可以在构建设置中启用“运行静态分析器”以获得有关此类事件的警告。

答案 1 :(得分:1)

您正在取消分配autorelease d字符串。虽然您正在执行NSString*printvolfirst=[[NSString alloc]init];,但当您执行printvolfirst=[format stringFromNumber:[NSNumber numberWithFloat:vol]];并将自动释放的对象分配给printvolfirst时,您将失去对该对象的引用。在此过程中,您还创建了内存泄漏。你不必发布它。