创建指针后删除对象[Objective-C]

时间:2012-12-31 13:56:50

标签: iphone objective-c ios

  

可能重复:
  Does lastObject in NSMutableArray return a copy of the object?

我正在关注iOS开发的斯坦福课程,我有一个疑问。 问题是我有一个带有“操作数”(NSNumbers)的数组(operandStack),我想要一个弹出最后一个元素然后从数组中删除它的函数。这就是教程sais(它的工作原理):

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

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

对不起我的英语:S我希望我能说清楚。

谢谢,

卡洛斯

1 个答案:

答案 0 :(得分:4)

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

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