2010-08-18 1 views
0

Quelqu'un peut-il me dire pourquoi le code suivant fuit? Instruments me parle de 2 fuites. Les 2 lignes qui provoquent évidemment la fuite sont:Instruments Leaks raconte une fuite de mémoire lors de l'initialisation de l'objet

Person *pers = [[Person alloc] init]; 

et

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 

L'ensemble est ci-dessous:

PersonViewController *personenDatenController = [[PersonViewController alloc] 
      initWithStyle:UITableViewStyleGrouped]; 

personenDatenController.view.backgroundColor = [UIColor clearColor]; 

Person *pers = [[Person alloc] init]; 

NSString *path = [[self class] pathForDocumentWithName:@"Person.plist"]; 
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:path]; 
if (!fileExists) { 
    NSLog(@"file does not exist yet"); 
    NSString *content = @""; 
    NSData *fileContents = [content dataUsingEncoding:NSUTF8StringEncoding]; 
    [[NSFileManager defaultManager] createFileAtPath:path 
      contents:fileContents 
      attributes:nil]; 

} 

NSMutableDictionary *dict = [[NSMutableDictionary alloc] 
     initWithContentsOfFile:path]; 
[pers setVorName:[dict valueForKey:@"vorName"]]; 
[pers setNachName:[dict valueForKey:@"nachName"]]; 
[pers setStrassenName:[dict valueForKey:@"strassenName"]]; 
[pers setHausNummer:[dict valueForKey:@"hausNummer"]]; 
[pers setPlz:[dict valueForKey:@"plz"]]; 
[pers setStadt:[dict valueForKey:@"stadt"]]; 
[pers setHandyNummer:(NSInteger*)[dict valueForKey:@"handyNummer"]]; 
[pers setEmail:[dict valueForKey:@"email"]]; 
[pers setSteuerSatz:[[dict valueForKey:@"steuerSatz"] floatValue]]; 
[dict release]; 


    [personenDatenController setPerson:pers]; 

    [navigationController pushViewController:personenDatenController animated:YES]; 

[personenDatenController release]; 

    [pers release]; 

La variable "chemin" provient de la méthode statique suivante:

+ (NSString *)pathForDocumentWithName:(NSString *)documentName 
{ 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *tempPath = [documentsDirectory stringByAppendingPathComponent:documentName]; 

    return tempPath; 
} 

merci i n avance pour votre aide!

Amitiés

Phil

+0

semble correct. Peut-être laisser l'analyseur statique y jeter un coup d'œil. Gardez à l'esprit que l'objet personne * doit * exister tant que le fichier personenDataController est visible - ce qui peut être signalé à tort comme une fuite si vos instantanés sont mal synchronisés. Enfin, peut-être que cette PersonViewController fuit ces objets. – Eiko

Répondre

0

En supposant que les appels setPerson conservent le pers. Est-ce que votre PersonViewController dealloc, appelez la publication sur cet objet? Si oui, mettez un point d'arrêt là (ou NSLog) et découvrez le retainCount de la personne. Si ça ne va pas à 0, où d'autre pourriez-vous l'avoir retenu?

0

Merci les gars pour vos réponses. PersonViewController conserve l'objet person mais j'ai mis une release pour l'objet person dans dealloc. Le retaincount est correct. J'ai déplacé l'initialisation de l'objet Person à PersonViewController et maintenant tout va bien. Cela me semble assez étrange.

Merci vous

Cordialement

Questions connexes