2011-11-14 130 views
0

我很确定这是造成泄漏,我想要一些建议。这是基于代码的我在做什么:基于这样的事实,我对NSMutableArray的分配空间,而不是释放它,那是一个正确的泄漏iOS内存泄漏建议

NSMutableArray* straVideoTitles; 

- (void) parseData{ 
    //stuff 
    straVideoTitles = [self getVideoTitle:strData]; //strData contains unparsed data 
    //more stuff 
} 

- (NSMutableArray*) getVideoTitles:(NSString*)strData{ 
    NSMutableArray *array; 
    array = [[NSMutableArray alloc] init]; 
    //Parse data and populate array 
    return array; 
} 

?我如何解决这个问题?我应放弃返回一个值,并指定straVideoTitles内getVideoTitles然后释放,如:

- (void) getVideoTitles:(NSString*)strData{ 
    NSMutableArray *array; 
    array = [[NSMutableArray alloc] init]; 
    //Parse data and populate array 
    straVideoTitles = array; 
    [array release]; 
} 

还是我这一切错了吗?或者一切正常,因为我在dalloc中释放straVideoTitles?

回答

3

你可以改变

return array; 

return [array autorelease]; 

或者你可以使用ARC,只是不关心它了。

编辑:第二种方法是可能的,不包括内存泄漏,但代码封装较少,因此可重用性较差,未来可证明。

+0

看起来这并获得成功。谢谢。 – Scott

2

更改为

return [array autorelease];

2

从方法返回autorelease对象是一种很好的做法。这被称为延期发布消息。

您正在放弃所有权,同时允许方法调用方在释放数组之前使用返回的数组。

你return语句应该是:

return [array autorelease]; 

有关内存管理的详细信息到这里看看:

Advanced Memory Management Programming Guide