0

嘿,我有几个关于NSString.

这两种说法有何不同?

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

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

4

1 回答 1

4

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

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

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

于 2010-11-13T23:12:35.923 回答