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

dre*_*yln 1 objective-c autorelease nsmutablearray

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

- (MyObject *)getFromArray
{
    return [myArray objectAtIndex:currentIndex];
}
Run Code Online (Sandbox Code Playgroud)

我应该这样打电话给自动释放吗?

- (MyObject *)getFromArray
{
    return [[myArray objectAtIndex:currentIndex] autorelease];
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Ole*_*ann 6

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

没有!始终遵循简单的内存管理规则:如果你不拥有它(通过alloc,new,copy,或retain),你不能(自动)释放它.

我知道数组在返回所述对象时会在对象上调用自动释放

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