initWithContentsOfFile在viewWillAppear内存泄漏中的Plist

时间:2012-05-14 22:02:06

标签: ios memory-leaks nsmutablearray plist initwithcontentsoffile

我正在ViewVillAppear中加载我的plist文件,如下所示。在第一次加载时我没有泄漏,但按下其他tabBar按钮/项目并返回到此视图我得到泄漏。我已经在dealloc中发布了这个NSMutableArray,但它仍然泄漏。有点困惑为什么。 (theProducts3是一个NSMutableArray,就像.h中的ivar一样,它不是@property或保留)

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];  

NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *plistPath = [rootPath stringByAppendingPathComponent:@"basket.plist"];
theProducts3 = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];

NSLog(@"Number of objects in item array %i", [theProducts3 count]);
}

在这里发布NSMutable数组。

-(void)dealloc{
[theProducts3 release];
[super dealloc];
}

任何指针最受赞赏!感谢...

1 个答案:

答案 0 :(得分:1)

dealloc不是viewWillAppear:的倒数。它是alloc的倒数。 viewWillAppear:的倒数为viewWillDisappear:

发生的事情是,当你的视图出现时,你正在分配内存,然后你要去一个不同的视图控制器,回来,你的视图再次出现,你正在分配更多的内存,从而泄漏原始存储器中。

如果您的数组只需要在您的视图位于内存中时就会挂起,请在viewDidLoad:中分配并在viewDidUnload:dealloc中释放。请记住在释放后将实例变量设置为nil