CS193P分配2清除功能

时间:2013-02-19 03:45:23

标签: objective-c

鉴于此实施:

- (NSMutableArray *)programStack
{
    if (_programStack == nil)
        _programStack = [[NSMutableArray alloc]init];
    return _programStack;
}

- (id)program
{
    return [self.programStack copy];
}

+ (double)popOperandOffStack:(NSMutableArray *)stack
{
    double result = 0;

    id topOfStack = [stack lastObject];
    if (topOfStack)
        [stack removeLastObject];

    if ([topOfStack isKindOfClass:[NSNumber class]]) {
        result = [topOfStack doubleValue];
    }
    else if ([topOfStack isKindOfClass:[NSString class]]) 
    {
        NSString *operation = topOfStack;
        // C
        if ([operation isEqualToString:@"C"])
        {
            [stack removeAllObjects];
            return 0; 
        }
    }
}

我是否正确假设类方法对[stack removeAllObjects]的调用仅影响副本的副本而不是从实例的_programStack中删除所有对象?从那个类方法中,你将如何影响实例的变量?或者有更好的方法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

[stack removeAllObjects];将从stack中移除所有对象。如果从对象调用+ (double)popOperandOffStack:(NSMutableArray *)stack,将实例变量作为stack传递,则popOperandOffStack:将对该实例变量进行操作并删除所有对象:

[[self class] popOperandOffStack:self.myInstanceArray]

另一方面,如果您致电[[self class] popOperandOffStack:[self.myInstanceArray mutableCopy]],它将在副本上运行。