0

尝试从我的代码中删除内存泄漏时遇到了一些麻烦。在下面的代码中,我在“configurationArray = [[NSArray arrayWithContentsOfFile:controllerConfigurationFilePath] retain];”这一行得到了内存泄漏 但是,当我删除保留时,应用程序崩溃并将保留更改为自动释放也会导致崩溃。

谢谢,威廉

 -(NSArray*)decodeConfigurationFile:(NSString*)fileName{
 NSArray* configurationArray = [[NSArray alloc] init];

 NSString *controllerConfigurationFilePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"];
 if (controllerConfigurationFilePath != nil) {
  // returns array of items storing the data for form 
  configurationArray = [[NSArray arrayWithContentsOfFile:controllerConfigurationFilePath] retain];
 }

 // returns fields dictionary objects from plist into an array
 return [[configurationArray objectAtIndex:0] objectForKey:@"fields"];
}
4

1 回答 1

2

问题似乎是你正在分配一个数组

NSArray* configurationArray = [[NSArray alloc] init];

然后你通过做创建一个新数组

configurationArray = [[NSArray arrayWithContentsOfFile:controllerConfigurationFilePath] retain];

无需发布您创建的第一个数组。第一行应该只是

NSArray* configurationArray = nil;

而且您不需要保留,因为它是一个局部变量,并且您不会将指向该数组的指针保留在该函数的范围之外。

崩溃可能是由于调用此方法的对象可能没有保留此方法返回的对象,如果没有其他东西保留它,它将与数组一起被释放。因此,当您尝试在代码中的其他位置访问该对象时,该对象不再存在。如果调用对象需要保留这个返回的对象,调用对象应该保留返回的对象。

于 2010-09-03T15:19:25.407 回答