NSString分配中的无效摘要

时间:2011-05-11 02:15:09

标签: objective-c ios

我正在尝试实现一个简单的计算器,我必须在NSString类型的变量中更新当前操作(+, - ,* etc)。当前操作作为参数接收到模型。

 -(double)doOperation:(NSString *)operation withOperand:(double)operand
 {
     if (!currentOperation)
     {
         anOperand = operand;
     }   

     currentOperation = operation; //Invalid Summary in currentOperation; but + in operation
 }

这可能有什么问题?如果NSString不允许直接赋值指针,那么替代方法是什么?

修改

  1. 更准确地说,在iOs中使用= sign?
  2. 分配NSString是否合法
  3. 如果没有,那么该怎么办。
  4. 注意:currentOperation是Controller类中的私有变量,operation是该方法的参数。

    这是完整的代码

    @interface CalculatorBrain : NSObject {
        double anOperand;
        NSString * currentOperaion;
    }
    
    - (double) doOperation: (NSString *) operation 
               withOperand: (double) operand;
    
    @end
    
    
    
    @implementation CalculatorBrain
    
    
    - (double) doOperation: (NSString *) operation 
               withOperand: (double) operand
    {
        if (!currentOperaion)
        {
            anOperand = operand;
        }
        else if([currentOperaion isEqual: @"+"])
        {
            anOperand += operand;
        }
        else if([currentOperaion isEqual: @"-"])
        {
            anOperand -= operand;
        }
        else if([currentOperaion isEqual: @"*"])
        {
            anOperand *= operand;
        }
        else if([currentOperaion isEqual: @"/"])
        {
            anOperand /= operand;
        }
    
        currentOperaion = operation; //This is where the statement doesn't work as expected
    
        if ([currentOperaion isEqual: @"="])
        {
            currentOperaion = nil;
        }
    
        return anOperand;
    }
    
    @end
    

2 个答案:

答案 0 :(得分:4)

  

更准确地说,在iOs中为NSString分配=符号是否合法?

是。

  

这可能有什么问题?

如果您想稍后使用该实例,那么您没有获取会导致问题的字符串的所有权,请参阅memory management guide

  

您可以使用retain取得对象的所有权   请记住,对象可能有多个所有者。取得对象的所有权是你说要让它保持活力的方式。

你可以-retain字符串,或-copy来避免外部代码的突变,例如:

// in -doOperation::
[currentOperation release];
currentOperation = [operation copy]; // copy if operation might be mutable

// relinquish ownership:
- (void)dealloc {
    [currentOperation release];
    [super dealloc];
}

另请查看declared properties

答案 1 :(得分:1)

如果currentOperation声明为NSString,请尝试

currentOperation = [NSString stringWithString:operand];