我对以下两个例子有一个简短的问题。目前我正在使用顶级示例,因为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];
}
我个人认为在这种情况下并不重要,因为我在标签上设置文本,直到应用程序退出时才会被释放。
加里
答案 0 :(得分:7)
第二种选择肯定更好。字符串文字只是指向代码的指针,而不是分配的内存。第二个版本重量轻很多。你也可以这样做:
[helloLabel setText: @"Hello World"];
答案 1 :(得分:5)
绝对是第二个,如果它只是关于内存优化。第一个将另外分配给你初始化的静态分配的字符串(加上在堆上分配对象的开销)。
NSString *newText = [[NSString alloc] initWithString:@"Hello World"];
此代码段动态分配“Hello World”的副本,但“Hello World”必须存在于首先要复制的地方。 ;)
还应该注意的是,只要可能,编译器就会对相同的字符串重复使用相同的引用,因此如果你定义了五个字符串,其中包含“Hello World”作为其内容,那么实际上只有一个。