gpt4 book ai didi

objective-c - NSMutableArray 和 NSDictionary 的内存泄漏

转载 作者:行者123 更新时间:2023-12-03 17:30:50 25 4
gpt4 key购买 nike

我遇到内存泄漏问题,也许有人可以帮助我。我尝试为 pList 加载 NSMutable 数组并在 TablevView 中显示一些元素

在我声明的 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中我加载bestellListe中的pList

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

这会导致内存泄漏

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

这里是释放

- (void)dealloc {

NSLog(@"Bestellung dealloziert");

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

[bestellListe release];
[myTable release];

[super dealloc];

有人可以给我一些帮助吗,我对此很陌生。

最佳答案

您的属性合成方法会自动保留接收到的对象:

@property (nonatomic, retain) NSMutableArray *bestellListe;

所以当你这样做时:

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

您的 bestellListe 的保留计数为 2(分配 + 属性的保留)。

在你的 dealloc 上,你只能释放它一次:

[bestellListe release];

更简单的解决方案似乎在创建它时只保留它一次,并使用自动释放的初始化程序,例如:

self.bestellListe = [NSMutableArray arrayWithContentsOfFile:filePath];

希望这能有所帮助

关于objective-c - NSMutableArray 和 NSDictionary 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4358440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com