Eliminar un object después de crear un puntero a él

Posible duplicado:
¿LastObject en NSMutableArray devuelve una copy del object?

Estoy siguiendo el curso de Stanford sobre desarrollo de iOS y tengo una duda. La cosa es que tengo una matriz (operandStack) con "operandos" (NSNumbers) y quiero una function que muestre el último elemento y luego lo borre de la matriz. Esto es lo que dice el tutorial (y funciona):

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

Mi pregunta es: si con el operando NSNumber * estamos simplemente "apuntando" al último object y en la siguiente línea eliminamos este último object, ¿cómo es posible que luego lo devolvamos? Quiero decir, si eliminamos el último object y el operando está apuntando a ese object, entonces el operando debería estar apuntando a nada, así que no puedo entender cómo es posible que podamos regresar el operando … Entendería el código si El operando era una copy del último object de la matriz, pero este no es el caso …

Perdón por mi inglés: SI espero haber quedado claro.

Gracias,

Carlos

El método removeLastObject elimina un object de la matriz, no de la memory. Antes de eliminar el object de la matriz, lo asigna a una variable local. Al comstackr con ARC, las variables locales que apuntan a los objects tienen un calificador implícito de vida de __strong .

Dado que agrega la fuerte reference al object antes de eliminarlo de la matriz, su método se apropia temporalmente de ella. Incluso si el método devuelve el object en sí mismo en lugar de su valor, esto seguiría funcionando correctamente, ya que ARC insertía una llamada de autorelease lugar de una release al final del método.