到目前为止,我正在阅读内存管理规则
- (void)printHello {
NSString *string;
string = [[NSString alloc] initWithString:@"Hello"];
NSLog(@"%@", string);
[string release];
}
您拥有所有权并且必须发布string
,但我对@"Hello"
感到好奇。 @" "
是创建和NSString
的语法,它是一个对象。那不是泄露了吗?
答案 0 :(得分:10)
@"…"
是NSString
的文字实例。当编译器看到文字字符串时,它会将字符串映射到二进制文件(例如您的程序),并且在加载二进制文件时(例如,当您运行程序时)该字符串可用作NSString
对象。您不必管理文字字符串占用的内存,因为它们是二进制文件的固有部分 - 它们始终可用,它们永远不会被释放,您不必担心管理它们的内存。
答案 1 :(得分:1)
Bavarious的回答是正确的。对于好奇的人,我可以补充一点,这在Apple的“字符串编程指南”中有记载,特别是“Creating Strings”部分,它说的是(强调我的):
在源代码中创建字符串对象的最简单方法是使用Objective-C
@"..."
构造:
NSString *temp = @"/tmp/scratch";
请注意,以这种方式创建字符串常量时,应使用UTF-8字符。 这样的对象是在编译时创建的,并且在整个程序的执行过程中都存在。编译器使这些对象常量在每个模块的基础上是唯一的,并且它们永远不会被释放。