0

我的应用程序告诉我,我过度释放了下面的 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]];

但我不确定为什么。我应该在分配后添加“分配、复制或保留”属性吗?当我摆脱下面的“发布”语句时,代码工作正常。

谢谢,

G

4

1 回答 1

0

问题确实出在这一行:

tempDouble = [tempDouble decimalNumberByDividingBy:[numTen decimalNumberByRaisingToPower:currencyScale]];

您在这里所做的是将 tempDouble 中的先前值(保留计数为 1)替换为新值(自动释放)。

这是正确的方法:

NSDecimalNumber* tempDouble = [[[NSDecimalNumber alloc] initWithString:self.tempStore] autorelease];

[tempDouble release]然后从方法末尾删除。

于 2010-11-26T21:41:00.020 回答