【问题标题】:Memory Leak initWithContentsOfFile内存泄漏 initWithContentsOfFile
【发布时间】:2011-08-27 14:12:53
【问题描述】:

我刚刚通过仪器完成了我的应用程序的运行,并且我正在泄漏 _NSCFDictionaries 失控。我没有为锻炼数组设置@property,因为它是一个私有实例变量。

NSString *Path = [[NSBundle mainBundle] bundlePath];
NSString *DataPath = [Path stringByAppendingPathComponent:@"data.plist"];
NSArray *rawDump = [[NSArray alloc] initWithContentsOfFile:DataPath];
workoutArray = [[NSMutableArray alloc] init];

for (NSDictionary *dict in rawDump){
    [workoutArray addObject: dict];
}

[rawDump release];

我在 -dealloc 中释放了锻炼数组

 - (void)dealloc {
[workoutArray release];
[managedObjectContext release];
[df release];
[super dealloc];

}

非常感谢任何帮助。

【问题讨论】:

  • 这是在一个线程中吗?你可能需要一个 NSAutoreleasePool。
  • 该代码是否被多次调用?
  • 您确定您没有运行该方法两次(或更多)?
  • @Bill tr​​ainingArray 如果我自动释放则变为 nil
  • @Eiko 和 @Roman 是的,这是我的主屏幕,它被多次调用

标签: iphone objective-c cocoa-touch memory-leaks


【解决方案1】:

正如您所指出的(在同一个实例上)多次运行它,那么问题是您重新分配 workoutArray 而不释放旧对象。在重新分配之前,您需要 release 旧对象:

[workoutArray release];
workout Array = [[NSMutableArray alloc] init]; // etc.

由于 workoutArray 作为 ivar 在第一次默认情况下为零,这应该始终正常工作。

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    • 2011-10-31
    相关资源
    最近更新 更多