2013-02-19 72 views
0

鑑於此實現:CS193P分配2清除功能

- (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; 
     } 
    } 
} 

我是在假設類方法的調用[堆棧removeAllObjects]隻影響副本的副本,而不是刪除所有對象從實例的_programStack糾正?你如何從該類方法中影響實例的變量?還是有更好的方法來做到這一點?

謝謝。

回答

0

[stack removeAllObjects];將從stack中刪除所有對象。如果你從一個對象調用+ (double)popOperandOffStack:(NSMutableArray *)stack,通過一個實例變量作爲stack,然後popOperandOffStack:運行在這個實例變量,將刪除所有對象:如果,另一方面,你叫[[self class] popOperandOffStack:[self.myInstanceArray mutableCopy]]它會在運作

[[self class] popOperandOffStack:self.myInstanceArray] 

複製。