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、インスタンス変数を として渡し、そのインスタンス変数stackpopOperandOffStack:動作し、すべてのオブジェクトを削除します。

[[self class] popOperandOffStack:self.myInstanceArray]

一方、呼び出す[[self class] popOperandOffStack:[self.myInstanceArray mutableCopy]]と、コピーで動作します。

于 2013-02-19T03:53:04.217 に答える