通过objectAtIndex返回从NSMutableArray检索的对象 - 自动释放是否必要?

时间:2011-04-21 23:22:11

标签: objective-c nsmutablearray autorelease

场景 - 我有一个方法返回从NSMutableArray检索的对象,类似于下面的代码(已经简化了)(假设“myArray”和“currentIndex”是此方法所在的类的iVars):

- (MyObject *)getFromArray
{
    return [myArray objectAtIndex:currentIndex];
}

我是否应该像这样呼吁自动释放?

- (MyObject *)getFromArray
{
    return [[myArray objectAtIndex:currentIndex] autorelease];
}

我知道数组在返回所述对象时会在对象上调用autorelease,但我的理解是自动释放的对象仅在调用者范围的持续时间内有效,在本例中是上述方法。因此,如果确定有问题的对象对我的方法的调用者有效,那么自动释放(如上面第二个代码片段所示)是否正确?只是试图确保我对autorelease如何工作的推理和理解是正确的。

谢谢!

1 个答案:

答案 0 :(得分:6)

  

我是否应该致电自动释放?

没有!始终遵循简单的内存管理规则:如果您不拥有(allocnewcopyretain),则不得(自动)发布它

  

我知道数组在对象上调用autorelease,因为它返回所述对象

这个假设是错误的。该数组只返回该对象,它不会释放它。 (它实际上可能会在对象上调用[[... retain] autorelease]但这是另一回事。)数组只会在从数组中删除对象时或者当数组本身被释放时释放对象。