我的应用程序告诉我,我过度发布了下面的NSDecimalNumber tempDouble:
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setLocale:[NSLocale currentLocale]];
[currencyFormatter setGeneratesDecimalNumbers:TRUE];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
// Here is the key: use the maximum fractional digits of the currency as the scale
int currencyScale = [currencyFormatter maximumFractionDigits];
NSDecimalNumber* tempDouble = [[NSDecimalNumber alloc] initWithString:self.tempStore];
NSDecimalNumber* numTen = [[NSDecimalNumber alloc] initWithInt:10];
tempDouble = [tempDouble decimalNumberByDividingBy:[numTen decimalNumberByRaisingToPower:currencyScale]];
[numTen release];
[textField setText:[currencyFormatter stringFromNumber:tempDouble]];
[currencyFormatter release];
[tempDouble release];我认为问题就是这一条:
tempDouble = [tempDouble decimalNumberByDividingBy:[numTen decimalNumberByRaisingToPower:currencyScale]];但我不知道为什么。我应该在赋值后添加一个'assign,copy or retain‘属性吗?当我去掉下面的“release”语句时,代码运行得很好。
谢谢,
G
发布于 2010-11-27 05:41:00
问题确实出在这一行:
tempDouble = [tempDouble decimalNumberByDividingBy:[numTen decimalNumberByRaisingToPower:currencyScale]];您在这里所做的是将tempDouble中以前的值(保留计数为1)替换为一个新值(自动释放)。
下面是正确的方法:
NSDecimalNumber* tempDouble = [[[NSDecimalNumber alloc] initWithString:self.tempStore] autorelease];然后从方法的末尾删除[tempDouble release]。
https://stackoverflow.com/questions/4288673
复制相似问题