【问题标题】:Objective-C switch defines contents of stringObjective-C 开关定义字符串的内容
【发布时间】:2009-07-14 09:57:15
【问题描述】:

我来自 java 背景,所以我仍在掌握一些使用 Obj-C 做事的方法。

根据提供的数字,我希望 NSString 变量具有不同的内容。

在java中我会做这样的事情:

string foo;
switch (numberToSwtich){

    case 1:
       foo = "Something!";
       break;
    case 2:
       foo = "Something Else!";
       break;
}

显然objective-c中有两种String类型。 NSString 和 NSSMutableString。

不同之处在于您可以在以后更改一个。但是,和 java 一样,我可以先初始化一个 NSString,然后再设置它的内容,还是需要使用一个 NSMutableString?

有点像这样……

NSString *aString = [[NSString alloc] init];

switch ([self getNumberOfSides]) {
    case 1:
        aString = @"A String"; 
        break;
    case 2:
        aString = @"Another String"; 
        break;
}

我知道还有其他方法可以做到这一点,例如使用带有数字键的 NSDictionary,但我想使用开关。

谢谢。

【问题讨论】:

    标签: objective-c string switch-statement


    【解决方案1】:

    您的代码完全有效。没有必要使用 NSMutableString。

    您的代码确实会泄漏内存,因为您没有释放使用 alloc 分配的空字符串。空字符串最好使用“string”类方法:

    NSString *aString;
    
    switch ([self getNumberOfSides]) {
            case 1:
                    aString = @"A String"; 
                    break;
            case 2:
                    aString = @"Another String"; 
                    break;
            default:
                    aString = [NSString string];
                    break;
    }
    

    【讨论】:

    • 谢谢。我不知道为什么我认为那行不通。这很合乎逻辑。一定是这方括号的土地让我感到奇怪!
    • 使用 [NSString string] 没有真正的需要或目的 - 只需使用 @""。 “字符串”工厂方法是为了保持一致性,并且在有用的可变版本中使用([NSMutableString string])。
    • 作为一般的好习惯,我建议也说 NSString *aString = nil;这样做总是好的。
    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多