2010-07-21 4 views
1

J'ai une fuite dans le code suivant:problème de fuite sur NSUserDefaults et NSMutableArray

- (void)viewDidAppear:(BOOL)animated { 
//If Home-Theme 
    if (themeIndex == 0) { 
     NSUserDefaults *pref = [NSUserDefaults standardUserDefaults]; 
     NSMutableArray *thisArray = [[NSMutableArray alloc] init]; 
     thisArray = [[pref objectForKey:@"Themes"] mutableCopy]; 
     [thisArray release]; 
    } 
} 

la fuite est à NSMutableArray. J'ai essayé quelques solutions de contournement différentes mais rien n'est de l'aide. Peut-être qu'il y a un problème avec le NSUserDefaults? des idées?

merci xnz

+0

Ou Ollys comme il posté presque la même chose plus tôt ... @will, vous pouvez rappeler aux utilisateurs d'accepter * une * réponse, mais ne les forcez pas à accepter le vôtre. –

+0

@George Fritszsche - Il m'a remercié dans mon message ... ou je n'aurais pas. Merci pour la police si :) – willcodejavaforfood

Répondre

1
NSMutableArray *thisArray = [[NSMutableArray alloc] init]; 

qui fuit, puisque vous ne relâchez cette instance, juste attribuer un nouveau dans la ligne suivante. Remplacez-le par:

NSMutableArray *thisArray = [[pref objectForKey:@"Themes"] mutableCopy]; 
+0

Merci! cela fonctionne ... – xnz

1

Vous allouez un NSMutableArray et modifiez la référence à un autre tableau.

Vous voulez probablement quelque chose comme ceci:

- (void)viewDidAppear:(BOOL)animated { 
    //If Home-Theme 
    if (themeIndex == 0) { 
    NSUserDefaults *pref = [NSUserDefaults standardUserDefaults]; 
    NSMutableArray *thisArray = [[pref objectForKey:@"Themes"] mutableCopy]]; 
    // do something with thisArray 
    [thisArray release]; 
    } 
} 
+0

Il manque une 'release' à votre échantillon. –

+0

@George Fritszsch, merci. J'ai mis à jour l'exemple de code. – Olly

0

vous alloc thisArray puis écrasez la référence avec une copie mutable de pref. Soit autorelease ou simplement supprimer l'allocation inutile NSMutableArray

Questions connexes