场景 - 我有一个方法返回从NSMutableArray检索的对象,类似于下面的代码(已经简化了)(假设“myArray”和“currentIndex”是此方法所在的类的iVars):
- (MyObject *)getFromArray
{
return [myArray objectAtIndex:currentIndex];
}
我是否应该像这样呼吁自动释放?
- (MyObject *)getFromArray
{
return [[myArray objectAtIndex:currentIndex] autorelease];
}
我知道数组在返回所述对象时会在对象上调用autorelease,但我的理解是自动释放的对象仅在调用者范围的持续时间内有效,在本例中是上述方法。因此,如果确定有问题的对象对我的方法的调用者有效,那么自动释放(如上面第二个代码片段所示)是否正确?只是试图确保我对autorelease如何工作的推理和理解是正确的。
谢谢!
答案 0 :(得分:6)
我是否应该致电自动释放?
没有!始终遵循简单的内存管理规则:如果您不拥有(alloc
,new
,copy
或retain
),则不得(自动)发布它
我知道数组在对象上调用autorelease,因为它返回所述对象
这个假设是错误的。该数组只返回该对象,它不会释放它。 (它实际上可能会在对象上调用[[... retain] autorelease]
但这是另一回事。)数组只会在从数组中删除对象时或者当数组本身被释放时释放对象。