iPhone分配或NSString的字符串文字?

时间:2010-01-25 17:25:56

标签: objective-c cocoa-touch

我对以下两个例子有一个简短的问题。目前我正在使用顶级示例,因为iPhone的资源有限,我最好手动分配和释放,因为使用底部字符串文字示例。有没有人喜欢哪一个?

if(activeSegment == 0) {
    NSString *newText = [[NSString alloc] initWithString:@"Hello World"];
    [helloLabel setText:newText];
    [newText release];
}

OR

if(activeSegment == 0) {
    NSString *newText = @"Hello World";
    [helloLabel setText:newText];
}

我个人认为在这种情况下并不重要,因为我在标签上设置文本,直到应用程序退出时才会被释放。

加里

2 个答案:

答案 0 :(得分:7)

第二种选择肯定更好。字符串文字只是指向代码的指针,而不是分配的内存。第二个版本重量轻很多。你也可以这样做:

[helloLabel setText: @"Hello World"];

答案 1 :(得分:5)

绝对是第二个,如果它只是关于内存优化。第一个将另外分配给你初始化的静态分配的字符串(加上在堆上分配对象的开销)。

NSString *newText = [[NSString alloc] initWithString:@"Hello World"];

此代码段动态分配“Hello World”的副本,但“Hello World”必须存在于首先要复制的地方。 ;)

还应该注意的是,只要可能,编译器就会对相同的字符串重复使用相同的引用,因此如果你定义了五个字符串,其中包含“Hello World”作为其内容,那么实际上只有一个。