3

可能重复:
NSMutableArray 中的 lastObject 是否返回对象的副本?

我正在学习有关 iOS 开发的斯坦福课程,但我对此表示怀疑。问题是我有一个带有“操作数”(NSNumbers)的数组(operandStack),我想要一个弹出最后一个元素然后从数组中删除它的函数。这就是教程所说的(并且有效):

- (double)popOperand
{
    NSNumber *operand = [self.operandStack lastObject];
    if(operand) [self.operandStack removeLastObject];
    return [operand doubleValue];
}

我的问题是:如果使用 NSNumber *operand 我们只是“指向”最后一个对象,并且在下一行中我们删除了最后一个对象,那么我们怎么可能返回它?我的意思是,如果我们删除最后一个对象并且操作数只是指向该对象,那么操作数应该不指向任何内容,所以我不明白我们怎么可能返回操作数......我会理解代码如果操作数是数组最后一个对象的副本,但事实并非如此......

对不起我的英语:SI希望我说清楚了。

谢谢,

卡洛斯

4

1 回答 1

4

removeLastObject方法从数组中删除一个对象,而不是从内存中。在从数组中删除对象之前,将其分配给局部变量。使用 ARC 编译时,指向对象的局部变量具有隐式的生命周期限定符__strong.

由于您在将对象从数组中删除之前添加了对对象的强引用,因此您的方法会暂时获得它的所有权。即使方法返回对象本身而不是其值,这仍然可以正常工作,因为 ARC 会在方法末尾插入autorelease调用而不是 a 。release

于 2012-12-31T14:43:38.587 回答