请注意下面注释掉的[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];
答案 0 :(得分:3)
stringFromNumber:
自动释放返回的对象。如果再次释放它,它将在解除分配后释放。
实际上,您甚至不需要此代码:
NSString*printvolfirst=[[NSString alloc]init];
您可以在构建设置中启用“运行静态分析器”以获得有关此类事件的警告。
答案 1 :(得分:1)
您正在取消分配autorelease
d字符串。虽然您正在执行NSString*printvolfirst=[[NSString alloc]init];
,但当您执行printvolfirst=[format stringFromNumber:[NSNumber numberWithFloat:vol]];
并将自动释放的对象分配给printvolfirst
时,您将失去对该对象的引用。在此过程中,您还创建了内存泄漏。你不必发布它。