iOS内存泄漏建议

时间:2011-11-14 18:44:45

标签: ios memory-management memory-leaks nsmutablearray

我很确定这会导致泄漏,我想要一些建议。这是基于我正在做的代码:

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

基于我为NSMutableArray分配空间而不释放它的事实,这就是泄漏吗?我该如何解决这个问题?我应该放弃返回一个值并在getVideoTitles中分配straVideoTitles然后释放如下:

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

还是我这样做错了?或者一切都很好,因为我在dalloc中发布了straVideoTitles?

3 个答案:

答案 0 :(得分:3)

您可以更改

return array;

进入

return [array autorelease];

或者你可以使用ARC而不再关心它。

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

答案 1 :(得分:2)

更改为

return [array autorelease];

答案 2 :(得分:2)

最好从方法中返回自动释放对象。这称为延迟发布消息。

您放弃所有权,同时允许方法的调用者在取消分配之前使用返回的数组。

您的退货声明应为:

return [array autorelease];

有关内存管理的更多信息,请查看此处:

Advanced Memory Management Programming Guide