2010-12-05 5 views
0

J'ai un problème de fuite de memomry, peut-être quelqu'un peut me aider. J'essaie de charger un tableau NSMutable pour un pList et montrer quelques éléments dans un TablevViewfuite de mémoire de NSMutableArray et NSDictionary

Dans le h.File Je déclare

@interface Bestellung : UIViewController <UITableViewDelegate, UITableViewDelegate> { 

NSMutableArray *bestellteVorspeisen; 
NSMutableArray *bestellteVorspeisenPreis; 
NSMutableArray *bestellteVorspeisenDetails; 
NSMutableArray *bestellteVorspeisenBild; 
NSMutableArray *bestellteVorspeisenNummer; 

NSMutableArray *bestellListe; 


IBOutlet UITableView *myTable; 


} 
@property (nonatomic, retain) NSMutableArray *bestellListe; 

@property (nonatomic,retain) NSMutableArray *bestellteVorspeisen; 
@property (nonatomic,retain) NSMutableArray *bestellteVorspeisenPreis; 
@property (nonatomic,retain) NSMutableArray *bestellteVorspeisenDetails; 
@property (nonatomic,retain) NSMutableArray *bestellteVorspeisenBild; 
@property (nonatomic,retain) NSMutableArray *bestellteVorspeisenNummer; 

@end 

Dans le M.File viewDidLoad je charge le pList dans bestellListe

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Bestellung.plist"]; 
    success = [fileManager fileExistsAtPath:filePath]; 
    if (!success) 
{  
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Bestellung" ofType:@"plist"]; 
     success = [fileManager copyItemAtPath:path toPath:filePath error:&error]; 
    } 
    self.bestellListe = [[NSMutableArray alloc] initWithContentsOfFile:filePath]; 

Je produis le MutableArray

bestellteVorspeisen  = [[NSMutableArray alloc] initWithCapacity:1]; 
bestellteVorspeisenPreis  = [[NSMutableArray alloc] initWithCapacity:1]; 
bestellteVorspeisenDetails = [[NSMutableArray alloc] initWithCapacity:1]; 
bestellteVorspeisenBild  = [[NSMutableArray alloc] initWithCapacity:1]; 
bestellteVorspeisenNummer = [[NSMutableArray alloc] initWithCapacity:1]; 

Ensuite, je les remplis de bestellListe

for (NSDictionary *bestellDict in bestellListe) 
    { if ([[bestellDict objectForKey:@"Tisch"] isEqualToString: 
[NSString stringWithFormat:@"%i",TischNummer]]) 
     {if ([[bestellDict objectForKey: kBestellungKategorieString] isEqualToString: @"Vorspeise"]) 
      [bestellteVorspeisen   addObject: [bestellDict objectForKey:kBestellungNameString]]; 
       [bestellteVorspeisenPreis  addObject: [bestellDict objectForKey:kBestellungPreisString]]; 
       [bestellteVorspeisenDetails  addObject: [bestellDict objectForKey:kBestellungDetailString]]; 
       [bestellteVorspeisenBild  addObject: [bestellDict objectForKey:kBestellungBildString]]; 
       [bestellteVorspeisenNummer  addObject: [bestellDict objectForKey:kBestellungNummer]]; 
} // if 
} // if 
} // for 

Cela provoque memoryleaks à

self.bestellListe = [[NSMutableArray alloc] initWithContentsOfFile:filePath]; 

et

bestellteVorspeisen  = [[NSMutableArray alloc] initWithCapacity:1]; 
bestellteVorspeisenPreis  = [[NSMutableArray alloc] initWithCapacity:1]; 
bestellteVorspeisenDetails = [[NSMutableArray alloc] initWithCapacity:1]; 
bestellteVorspeisenBild  = [[NSMutableArray alloc] initWithCapacity:1]; 
bestellteVorspeisenNummer = [[NSMutableArray alloc] initWithCapacity:1]; 

ici ist dealloc

- (void)dealloc { 

NSLog(@"Bestellung dealloziert"); 

[bestellteVorspeisen   release]; 
[bestellteVorspeisenPreis  release]; 
[bestellteVorspeisenDetails  release]; 
[bestellteVorspeisenBild  release]; 
[bestellteVorspeisenNummer  release]; 

[bestellListe     release]; 
[myTable      release]; 

[super dealloc]; 

Quelqu'un peut-il me donner un peu d'aide, je suis vraiment nouveau dans ça.

+0

pouvez-vous modifier et de mettre tout le code dans codeblocks format bitte. –

Répondre

5

votre méthode de synthèse de la propriété Maintient automatiquement reçu des objets:

@property (nonatomic, retain) NSMutableArray *bestellListe; 

Alors, quand vous faites:

self.bestellListe = [[NSMutableArray alloc] initWithContentsOfFile:filePath]; 

Votre bestellListe a un nombre conserver de 2 (alloc + le retenir de la propriété) .

Sur votre dealloc vous relâchez seulement une fois:

[bestellListe release]; 

La solution plus simple semble conserver une seule fois lors de sa création, avec un initialiseur autoreleased comme:

self.bestellListe = [NSMutableArray arrayWithContentsOfFile:filePath]; 

Hope this peut aider

+0

Merci beaucoup, cela a résolu le problème. – user3449120