2011-04-21 46 views
1

Scenario-我有一个返回从一个NSMutableArray类似于下面的代码已被简化检索的对象的方法(假设“myArray的”和“CURRENTINDEX”是用于类IVARS其中此方法驻留):通过objectAtIndex返回从NSMutableArray检索的对象 - autorelease必要?

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

我是否应该像对待autorelease这样的调用?

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

我知道,自动释放由数组返回表示对象调用的对象,但我的理解是,自动释放对象仅适用于调用者的范围,持续时间,在这种情况下,该方法以上。那么,如何确定所讨论的对象对于我的方法的调用者是否有效,是否会纠正autorelease(如上面的第二个代码段所示)?只是试图确保我对autorelease的工作原理和理解是正确的。

谢谢!

回答

6

我是不是应该打电话给autorelease?

不!始终遵循简单的内存管理规则:如果您不拥有它(通过alloc,new,copyretain),您不得(自动)释放它。

我知道,自动释放被称为由它返回数组对象上说,对象

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

+0

+1击败我6秒! ':)' – 2011-04-21 23:32:15

+0

感谢您的澄清。我只是想发布我的代码存在问题,因为我的(坏)关于autorelease的假设! – dreyln 2011-04-21 23:37:53

+0

作为后续,我安全地返回从数组中检索到的对象呢?它不会超出范围,并且对getFromArray的调用者使用不安全吗? – dreyln 2011-04-21 23:41:43

相关问题