这似乎不起作用:
NSString *string = [[NSString alloc] init];
string = @"%@M", anotherstring;
如果“anotherstring”为“5”,我希望这会使“string”等于“5M”。
这不是正确的语法吗?现在,我可以使用initWithFormat并且它可以工作,但是如何将它分成两个不同的行并且也可以工作?
答案 0 :(得分:3)
您的代码中有两个错误。首先,NSString
是不可变的,一旦你分配并初始化它们,它们就会被设置,并且没有办法改变它们。为此,您必须查看NSMutableString
。
其次,代码的语法没有意义。 @"%@M", anotherString
不是有效的Objective-C方法调用。您确实在寻找-initWithFormat:
来执行您想要的操作。代码应如下所示:
NSString *string = [[NSString alloc] initWithFormat:@"%@M", anotherString];
详细了解NSString
以及如何在NSString Programming Reference文档中使用它,以及String Programming Guide了解如何在Cocoa和Objective-C中使用字符串。< / p>
答案 1 :(得分:2)
这一行:
string = @"%@M", anotherstring;
在语法上是正确的,但它不会按照您的意愿执行。这是格式化字符串的方式:
NSString *string = [[NSString alloc] initWithFormat:@"%@M", anotherstring];
将它分成两行是没有意义的。这样:
NSString *string = [[NSString alloc] init];
string = [[NSString alloc] initWithFormat:@"%@M", anotherstring];
将创建一个额外的NSString
对象,并且还会导致内存泄漏。
答案 2 :(得分:2)
怎么样
NSString* string;
string = [[NSString alloc] initWithFormat:@"%@M", anotherString];
请注意,=
运算符是赋值。任何时候使用它,任何存储在您的变量中的值都会被新的值覆盖。因此,即使您的原始代码语法正确,它仍然具有错误的语义,在这种情况下会导致内存泄漏。
答案 3 :(得分:0)
只需将其变为属性即可,您无需担心释放并保留“字符串”(即如果您使用synthesize自动创建它)。并且不要忘记自动释放分配给属性的对象:
self.string = [[[NSString alloc] init] autorelease]