【问题标题】:Is it necessary to assign a string to a variable before comparing it to another?在将字符串与另一个变量进行比较之前,是否需要将字符串分配给变量?
【发布时间】:2009-08-19 22:34:31
【问题描述】:

我想将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";如果您要尝试从其他输入(例如)计算字符串,请仅使用 initWithFormat NSString *wrongTxt = [[NSString alloc] initWithFormat:@"%@ 错误 %d 次",craigString, wrongCount];

标签: objective-c cocoa-touch variables


【解决方案1】:

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

不,为什么不这样做:

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

使用@"" 只是创建一个字符串文字,它是一个有效的NSString

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

是的,你可以这样做:

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

【讨论】:

  • 这行得通。我想我只是有错误的代码。它之前抛出异常。
  • 详细说明:label.text IS 是一个字符串,所以当然你不需要从它创建一个字符串来进行比较。
【解决方案2】:
if ([statusString isEqualToString:@"Wrong"]) {
    // do something
}

【讨论】:

  • 谢谢韦瓦。 Perspx 快了 1 秒。
【解决方案3】:

Brian,在这里也值得一提——其他的当然是正确的,你不需要声明一个字符串变量。但是,下次您要声明一个字符串时,您不需要执行以下操作:

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

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

下次你想要一个字符串变量时,你可以更方便地使用“@”符号:

NSString *myString = @"SomeText";

这将在您完成后自动释放,这样您也可以避免内存泄漏...

希望有帮助!

【讨论】:

  • 我想知道这一点。我经常看到作为目标 c 对象的字符串变量,但它们从未被释放。谢谢!
  • 提示在“alloc”位。如果您使用 Alloc(或 Copy),则必须专门释放。如果你不这样做,约定是对象已经设置为自动释放。
  • 是的,虽然它可以包含newcopy 例如newObject(来自NSDictionaryController)或mutableCopy(来自NSObjectdeveloper.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/…
【解决方案4】:

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

NSString *myString = [NSString stringWithString:@"abc"];
NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2018-03-17
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2015-08-14
    • 2015-10-03
    相关资源
    最近更新 更多