帮助内存泄漏:从文件初始化NSMutableArray

时间:2011-09-02 05:36:12

标签: iphone memory-leaks nsmutablearray

在我的应用程序的某些时候,我需要从文件中加载一个列表,所以我实现了这个方法来加载列表:

-(void)loadList
{
    NSString *filePath = [self dataFilePath];  //This is a method return the path of file
    if([[NSFileManager defaultManager] fileExistsAtPath:filePath])
    {
        NSMutableArray *tempArray = [[NSMutableArray alloc]initWithContentsOfFile:filePath];
        self.list = [[NSMutableArray alloc]initWithArray:tempArray];
        [tempArray release];
    }
}

self.list是一个(保留)属性。

我认为在初始化selfl.list时泄漏来自[alloc]。我用了

self.list = [[[NSMutableArray alloc]initWithArray:tempArray]autorelease];

但应用程序因EXC_BAD_ACCESS而崩溃。所以我在这里很困惑如何解决这个问题。

感谢您的任何建议。

4 个答案:

答案 0 :(得分:3)

只需分配,

self.list = tempArray;

由于 tempArray 已经是一个数组,因此您不必从中创建另一个数组。您可以直接分配给 self.list

答案 1 :(得分:1)

  There is no need to allocate another time for array .So just assign directly

    -(void)loadList
   {
NSString *filePath = [self dataFilePath];  //This is a method return the path of file
if([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
    NSMutableArray *tempArray = [[NSMutableArray alloc]initWithContentsOfFile:filePath];
    self.list = [tempArray copy];
    [tempArray release];
}
 }

答案 2 :(得分:0)

是您的列表属性分配还是保留? 如果保留,那么你应该改变这个:

self.list = [[NSMutableArray alloc]initWithArray:tempArray];

到此:

self.list = [[NSMutableArray arrayWithArray:tempArray];

答案 3 :(得分:0)

不要自动释放。 (我猜)。