关于NSString的初学者问题很少

时间:2010-11-13 23:01:01

标签: objective-c cocoa core-foundation

嘿,我对NSString提出了几个问题。

这两个陈述有何不同?

NSString *str = @"asdasd";
NSString *str = [[NSString alloc] initWithString:@"asdasd"];

我是否正确另一个是静态字符串,在程序关闭之前不会从内存中释放出来?我一直使用第二种方法,当我不再需要它时就释放它。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

理论上,它们是不同的。第一个字符串是常量,不能是released。第二个(理论上再次)在堆上分配,当你完成它时应该是released。 (这是根据内存管理规则)

但是,在这个特定实例中没有区别,因为初始化器只会返回原始字符串。 因为编译器很聪明,可以看到“啊哈,你是从一个常量字符串中分配一个不可变对象,所以结果字符串保证与原始常量字符串相同,所以我可以跳过整个分配事情,只需重复使用常量字符串“。

事实证明它们将是相同的字符串。但是,您最初的肠道反应是正确的,您应该继续遵循它们。 :)