当我从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。
请详细说明。 感谢。
答案 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;
}