2010-11-26 3 views
0

Mon application me dit que je suis trop libérer le NSDecimalNumber tempDouble ci-dessous:Plus libérant une NSDecimalNumber

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]; 

Je pense que la ligne de problème est celui-ci:

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

Mais je ne sais pas pourquoi. Dois-je ajouter un attribut "affecter, copier ou conserver" après l'affectation? Quand je me débarrasse de la déclaration 'release' ci-dessous, le code fonctionne bien.

Merci,

G

+0

De quelle langue s'agit-il? S'il vous plaît dites-moi pour que je puisse ignorer son tag. –

Répondre

0

Le problème est en effet dans cette ligne:

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

Ce que vous faites ici remplace la valeur précédente dans tempDouble (qui a un nombre de conserver 1) avec une nouvelle valeur (qui est autoeleased).

Voici la bonne façon de le faire:

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

Et puis supprimez le [tempDouble release] de la fin de la méthode.

Questions connexes