4

在寻找NSStack或类似的时候,我遇到了这个代码示例。在pop方法中作者明确地保留returnObject然后返回一个autorelease对象。这真的有必要吗?我的印象是运行时将removeLastObject在运行循环迭代结束时销毁从内容中删除的对象(而不是在中间的某个地方)。

4

1 回答 1

6

这真的有必要吗?

如果您仍在使用手动内存管理。如果没有保留,returnObject则可以在将其从数组中删除后立即解除分配。可变数组保留它包含的对象,并在删除时释放它们。在删除对象之前保留它可以防止对象被释放;自动释放它允许对象停留足够长的时间以便调用方法接收它。

如果您正在使用 ARC(并且没有很多理由不使用),您不必担心任何这些。编译器将为您确定何时保留以及何时释放。

我的印象是运行时将在运行循环迭代结束时通过 removeLastObject 销毁从内容中删除的对象

如果 NSMutableArray 在删除对象时自动释放对象,就会发生这种情况,但我认为没有任何理由认为它确实如此。如果返回已删除的对象,您可以指望自动释放-removeLastObject已删除的对象,但事实并非如此。你永远不应该假设另一个对象对其拥有的对象做了什么。

于 2012-10-18T02:05:32.040 回答