无法在运行时从nsarray崩溃访问变量

时间:2012-11-09 15:44:32

标签: iphone objective-c ios ipad

当我从NSMuttable数组中弹出最后一个元素时,我在运行时崩溃。我得到了所有元素,但是当我获取最后一个元素时,它会给出错误。

-(id)popOperand{
   id operandObject = [self.operandStack lastObject];
   if(operandObject) [self.operandStack removeLastObject];
   return operandObject;
}

例如: - 如果在我的堆栈中我有“8”(其NSNumber对象)“+”(其NSString对象)2(其NSnumber对象)。

NSNumber *rightOperand = [self popOperand];
NSString *operation = [self popOperand];
NSNumber *leftOperand = [self popOperand];//when i acess 8 it shows empty array other           element is getting fine;

我的问题是为什么我无法获得最后一个对象,而此功能对其他元素工作正常。 编辑:在运行时,弹出2后它显示堆栈(8 +),但在我poped +它显示堆栈()空。但是“leftOperand”没有得到值。我没有使用ARC。

请详细说明。 感谢。

1 个答案:

答案 0 :(得分:0)

如果您不使用ARC,则会出现内存管理问题:

- (id)popOperand
{
   id operandObject = [self.operandStack lastObject];     // Still retained by operandStack
   if(operandObject) [self.operandStack removeLastObject];// Released by operandStack
   return operandObject;                                  // Could be dealloc'd any time now!
}

尝试此版本,该版本返回retain'和autorelease'd对象,该对象符合方法的命名约定:

- (id)popOperand
{
   id obj = nil;
   if ([self.operandStack count] > 0)
   {
       id obj = [[[self.operandStack lastObject] retain] autorelease];
       [self.operandStack removeLastObject];
   }
   return obj;
}