从 NSArray 返回的自动释放对象?

Posted

技术标签:

【中文标题】从 NSArray 返回的自动释放对象?【英文标题】:Autorelease object returned from NSArray? 【发布时间】:2010-10-25 18:44:03 【问题描述】:

我正在编写一个NSArray 类别以包含-objectAtRandom 消息,该消息从随机索引返回一个对象(类似于Python 的choice)。

我应该在返回之前自动释放这个对象吗?我相信我不应该,但我不确定......

【问题讨论】:

【参考方案1】:

根据正常的内存管理规则,不,你不应该。由于您大概使用objectAtIndex: 来返回对象,因此您不需要自己进行任何内存管理。

【讨论】:

【参考方案2】:

我会写return [[object retain] autorelease] - 这将保证,即使数组将被释放,用户也将能够使用对象直到当前的 runloop 循环完成。

【讨论】:

这不是必需的。 NSArray 保持强引用,直到它从数组中删除。如果开发人员删除了数组,可能应该明白他们可能会释放它包含的所有对象。 @adam 所以如果用户想确保他不会以对对象的无效引用结束,他应该保留它并在完成后释放它? 对。你可以做任何你想做的事,但是一旦你的代码释放了控制权,如果你想以后使用它,你必须保留这个对象。如果您只在本地范围内使用该对象,则实际上不需要保留它。

以上是关于从 NSArray 返回的自动释放对象?的主要内容,如果未能解决你的问题,请参考以下文章

从 NSArray objectAtIndex 返回的 NSString 是自动释放还是保留

安全的 NSArray 访问

返回executeFetchRequest的NSArray:结果时我应该保留,自动释放还是啥都不做?

自动释放的 NSArray 会导致内存泄漏吗?

自动释放对象递减的保留计数何时减少?

返回通过 objectAtIndex 从 NSMutableArray 检索到的对象 - 需要自动释放吗?