嘿,我对NSString
提出了几个问题。
这两个陈述有何不同?
NSString *str = @"asdasd";
NSString *str = [[NSString alloc] initWithString:@"asdasd"];
我是否正确另一个是静态字符串,在程序关闭之前不会从内存中释放出来?我一直使用第二种方法,当我不再需要它时就释放它。有人可以解释一下吗?
答案 0 :(得分:4)
理论上,它们是不同的。第一个字符串是常量,不能是released
。第二个(理论上再次)在堆上分配,当你完成它时应该是released
。 (这是根据内存管理规则)
但是,在这个特定实例中没有区别,因为初始化器只会返回原始字符串。 因为编译器很聪明,可以看到“啊哈,你是从一个常量字符串中分配一个不可变对象,所以结果字符串保证与原始常量字符串相同,所以我可以跳过整个分配事情,只需重复使用常量字符串“。
事实证明它们将是相同的字符串。但是,您最初的肠道反应是正确的,您应该继续遵循它们。 :)