我需要释放一个恒定的NSString吗?

时间:2011-04-24 09:36:34

标签: objective-c cocoa memory-management nsstring literals

到目前为止,我正在阅读内存管理规则

- (void)printHello {

    NSString *string;

    string = [[NSString alloc] initWithString:@"Hello"];

    NSLog(@"%@", string);

    [string release];

}

您拥有所有权并且必须发布string,但我对@"Hello"感到好奇。 @" "是创建和NSString的语法,它是一个对象。那不是泄露了吗?

2 个答案:

答案 0 :(得分:10)

@"…"NSString的文字实例。当编译器看到文字字符串时,它会将字符串映射到二进制文件(例如您的程序),并且在加载二进制文件时(例如,当您运行程序时)该字符串可用作NSString对象。您不必管理文字字符串占用的内存,因为它们是二进制文件的固有部分 - 它们始终可用,它们永远不会被释放,您不必担心管理它们的内存。

答案 1 :(得分:1)

Bavarious的回答是正确的。对于好奇的人,我可以补充一点,这在Apple的“字符串编程指南”中有记载,特别是“Creating Strings”部分,它说的是(强调我的):

  

在源代码中创建字符串对象的最简单方法是使用Objective-C @"..."构造:

     

NSString *temp = @"/tmp/scratch";

     

请注意,以这种方式创建字符串常量时,应使用UTF-8字符。 这样的对象是在编译时创建的,并且在整个程序的执行过程中都存在。编译器使这些对象常量在每个模块的基础上是唯一的,并且它们永远不会被释放。