2010-12-05 87 views
0

我有一个memomry泄漏问题,也许有人可以帮助我。 我尝试加载用于一个的plist阵列NSMutable并显示一些元件以TablevView内存泄漏NSMutableArray和NSDictionary

在h.File我声明

@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 

在M.File viewDidLoad中我加载的plist在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]; 

然后我产生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]; 

后来我填补他们从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 

这导致memoryleaks在

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

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

这里IST的dealloc

- (void)dealloc { 

NSLog(@"Bestellung dealloziert"); 

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

[bestellListe     release]; 
[myTable      release]; 

[super dealloc]; 

有人能给我一些帮助,我那真的很新鲜。

+0

你可以编辑并把所有的代码放在格式化的代码块,bitte。 – 2010-12-05 11:38:54

回答

5

你的财产合成方法自动保存接收到的对象:

@property (nonatomic, retain) NSMutableArray *bestellListe; 

所以,当你这样做:

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

你bestellListe具有2的保留计数(在ALLOC +从属性的保留) 。

在你的dealloc只释放一次:

[bestellListe release]; 

更简单的解决方案似乎在创建时,它保留它只有一次,有像自动释放初始化:

self.bestellListe = [NSMutableArray arrayWithContentsOfFile:filePath]; 

希望这可以帮助

+0

非常感谢,解决了这个问题。 – user3449120 2011-02-17 18:58:28