Помогите с утечкой памяти: init NSMutableArray из файла - PullRequest
0 голосов
/ 02 сентября 2011

В какой-то момент в моем приложении мне нужно загрузить список из файла, поэтому я реализую этот метод для загрузки списка:

-(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 является свойством (retain).

Я думаю, что утечка происходит из [alloc], когда я запускаю selfl.list.Я использовал

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

Но приложение вылетает из-за EXC_BAD_ACCESS.Поэтому я запутался, как решить эту проблему.

Спасибо за любые предложения.

Ответы [ 4 ]

3 голосов
/ 02 сентября 2011

Просто назначьте,

self.list = tempArray;

Поскольку tempArray уже является массивом, вам не нужно создавать другой массив из него.Вы можете напрямую присвоить self.list .

1 голос
/ 02 сентября 2011
  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];
}
 }
0 голосов
/ 02 сентября 2011

Не авто-релиз это.(Наверное).

0 голосов
/ 02 сентября 2011

Ваш список свойств присваивается или сохраняется?если оно сохранено, то вы должны изменить это:

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

на это:

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