【发布时间】:2010-07-22 09:09:46
【问题描述】:
好的,这是一个基本问题,但我之所以这么问,是因为我真的不明白如何正确管理这个问题。如果我取消注释最后两行,这段代码会崩溃,尽管我认为它不应该这样做。
以下代码来自自定义子类 UILabel,我在其中添加了以下方法 setTextFromFloat。
-(void)setTextFromFloat:(float)newValue {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode:NSNumberFormatterRoundUp];
NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:newValue]];
NSString *newLabelValue = [numberString stringByAppendingString:@"x"];
self.text = newLabelValue;
//[numberString release];
//[formatter release];
}
所以,这里有三个我很困惑的对象:
a) self.text(旧字符串值) - 什么时候发布?调用这个函数时是否应该释放 self.text 的旧内容?
b) 格式化程序,我在这里分配的 NSNumberFormatter 几乎肯定需要释放
c) numberString 呢?我只是将它用作构建 newLabelValue 的中介。如果我释放它,我相信程序会崩溃,但为什么呢?我对调用 stringFromNumber 间接使用的内存不负责吗?
任何智慧都非常感谢,谢谢!
【问题讨论】:
-
我强烈建议您从“构建”菜单中执行“构建和分析”。它将准确地突出显示您过度/不足发布的内容。
标签: iphone objective-c xcode memory-management nsstring