在iPhone中重新初始化字符串的问题

时间:2011-05-28 15:15:40

标签: iphone objective-c

我有这样的界面:

@interface MacCalculatorAppDelegate:NSObject 
<UIApplicationDelegate> {

    // ...
    UIButton *operatorPressed;
    NSString *waitingOperation;

}

我正在我的实现中初始化waitingOperation变量,如下所示:

- (id)init { 

    if (self = [super init]) {
        waitingOperation = @"not set";
    }

    return self;
}

我想在函数中重新初始化这个变量。这是计算器程序,当用户点击操作符按钮时,将调用以下函数:

- (IBAction)operatorPressed:(UIButton *)sender {

    if([@"+" isEqual:operand]) {
        waitingOperation = @"+";
    }
}

但在检查if语句后,我的程序将不会执行任何操作,当我尝试重新初始化waitingOperation变量时会发生这种情况。

我是objective-c的新手,请帮助我了解这里的错误。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

这里有几点需要注意。

waitingOperation=@"not set";

目前,这最终会导致程序崩溃。 Objective C字符串文字是NSString的自动释放实例,这意味着除非您将其分配给保留属性或手动保留它,否则内存将被释放,留下一个悬空指针。

-(IBAction) operatorPressed:(UIButton *)sender {

您是否确认此方法实际被调用?您必须在Interface Builder中分配IBAction。在调试器中逐步执行它,或使用NSLog验证是否正在调用此方法。

if([@"+" isEqual:operand])

operand来自哪里?

waitingOperation=@"+";

与上面相同的问题,这将在幕后释放,让你留下一个悬垂的指针。

另请注意,如果您知道这两个变量都是NSString s,则使用isEqualToString:比使用isEqual:更快。

最后,这些内容不应该是您的app委托的一部分。这是视图控制器逻辑。

答案 1 :(得分:0)

如果您的操作数也是字符串,请检查isEqualToString而不是isEqual