Jing
Jing

Reputation: 1965

Help with Memory leak: init NSMutableArray from file

In some point in my app, I need to load a list from a file, so I implement this method to load the list:

-(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];
    }
}

The self.list is a (retain) property.

I think the leak is from [alloc] when I init the selfl.list. I used

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

But the app crashes due to EXC_BAD_ACCESS. So I am confused here how to solve this.

Thanks for any suggestions.

Upvotes: 0

Views: 254

Answers (4)

MeloS
MeloS

Reputation: 7938

is your list property assign or retain? if it is retain, then you should change this:

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

to this:

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

Upvotes: 0

Akshay
Akshay

Reputation: 2983

Don't autorelease it. (I guess).

Upvotes: 0

Narayanan Ramamoorthy
Narayanan Ramamoorthy

Reputation: 826

  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];
}
 }

Upvotes: 1

EmptyStack
EmptyStack

Reputation: 51374

Just assign,

self.list = tempArray;

As tempArray is already an array, you don't have to create another array from it. You ca directly assign to self.list.

Upvotes: 3

Related Questions