0

鉴于此实现:

- (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 中删除所有对象,我是否正确?您将如何通过该类方法影响实例的变量?还是有更好的方法来做到这一点?

谢谢。

4

1 回答 1

0

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

[[self class] popOperandOffStack:self.myInstanceArray]

另一方面,如果您调用[[self class] popOperandOffStack:[self.myInstanceArray mutableCopy]]它将对副本进行操作。

于 2013-02-19T03:53:04.217 回答