在将一个字符串与另一个变量进行比较之前,是否有必要为其分配一个字符串?


85

我想将an的值NSString与字符串“ Wrong”进行比较。这是我的代码:

NSString *wrongTxt = [[NSString alloc] initWithFormat:@"Wrong"];
if( [statusString isEqualToString:wrongTxt] ){
     doSomething;
}

我真的必须为“错误”创建NSString吗?

另外,可我一个的值进行比较UILabeltext一个字符串没有标签值分配给字符串?


顺便说一句,您浪费了initWithFormat的时间,可以更改NSString * wrongTxt = [[NSString alloc] initWithFormat:@“ Wrong”]; 到NSString * wrongTxt = @“ Wrong”; 如果您要尝试从其他输入(例如NSString)计算字符串,则只对initWithFormat感到困扰。
克雷格(Craig)2012年

Answers:


178

我真的必须为“错误”创建NSString吗?

不,为什么不这样做:

if([statusString isEqualToString:@"Wrong"]){
    //doSomething;
}

使用会@""简单地创建一个字符串文字,它是有效的NSString

另外,可以在不将标签值分配给字符串的情况下将UILabel.text的值与字符串进行比较吗?

是的,您可以执行以下操作:

UILabel *label = ...;
if([someString isEqualToString:label.text]) {
    // Do stuff here 
}

那个有效。我想我只有错误代码。之前它引发了异常。
布赖恩

1
详细说明:label.text一个字符串,因此您当然不需要从中创建一个字符串进行比较。
2009年

26
if ([statusString isEqualToString:@"Wrong"]) {
    // do something
}

谢谢。Perspx快了1秒。
布赖恩

8

Brian,也值得一提-其他人当然是正确的,因为您不需要声明字符串变量。但是,下次要声明字符串时,不需要执行以下操作:

NSString *myString = [[NSString alloc] initWithFormat:@"SomeText"];

尽管上面的方法确实有效,但是它提供了一个保留的NSString变量,在使用完该变量后,您需要显式释放该变量。

下次需要字符串变量时,可以使用更方便的方式使用“ @”符号:

NSString *myString = @"SomeText";

完成后会自动释放,因此也避免了内存泄漏...

希望有帮助!


那时候我想过那个。我经常看到作为目标c对象的字符串变量,但它们从未被释放。谢谢!
布赖恩

2
提示在“分配”位中。如果使用Alloc(或复制),则必须专门发布。如果您不这样做,则约定是该对象将已经设置为自动释放。
h4xxr

是的,虽然它可以包含newcopy例如newObject(来自NSDictionaryController)或mutableCopy(来自NSObjectdeveloper.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/...
亚历Rozanski

2

您还可以使用NSString类方法,该方法还将创建一个自动发布的实例,并具有更多选项,例如字符串格式:

NSString *myString = [NSString stringWithString:@"abc"];
NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42];
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.