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

fuz*_*oat 2 cocoa-touch objective-c

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

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

要么

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

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

加里

Ben*_*ieb 7

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

[helloLabel setText: @"Hello World"];
Run Code Online (Sandbox Code Playgroud)


zne*_*eak 5

绝对是第二个,如果只是关于内存优化.第一个字符串除了用它初始化的静态分配字符串之外还分配一个字符串(加上在堆上分配对象的开销).

NSString *newText = [[NSString alloc] initWithString:@"Hello World"];
Run Code Online (Sandbox Code Playgroud)

此代码段动态分配"Hello World" 的副本,但"Hello World"必须存在于某处从第一个位置复制.;)

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