我需要释放一个常量 NSString 吗?

发布于 2024-11-02 23:18:15 字数 340 浏览 1 评论 0原文

我正在阅读内存管理规则,它说

- (void)printHello {

    NSString *string;

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

    NSLog(@"%@", string);

    [string release];

}

您拥有所有权并且必须释放 string,但我对 @"Hello" 很好奇。 @" " 是创建和 NSString 的语法,它是一个对象。那这样不会泄露吗?

I'm reading memory management rules to this point where it said

- (void)printHello {

    NSString *string;

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

    NSLog(@"%@", string);

    [string release];

}

you have ownership and have to release string, but I'm curious about the @"Hello". @" " is the syntax for creating and NSString, and it's an object. So doesn't that get leaked?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

何以畏孤独 2024-11-09 23:18:15

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

@"…" is a literal instance of NSString. When the compiler sees a literal string, it maps the string into the binary file (e.g. your program) and the string is available as an NSString object when the binary is loaded (e.g. when you run your program). You don’t have to manage the memory occupied by literal strings because they’re an intrinsic part of your binary — they are always available, they never get released, and you don’t have to worry about managing their memory.

请止步禁区 2024-11-09 23:18:15

巴伐利亚的回答是正确的。出于好奇,我可以补充一点,这记录在 Apple 的“字符串编程指南”中,特别是“创建字符串” (强调我的):

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

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

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

Bavarious's answer is correct. For the curious, I can add that this is documented in Apple's “String Programming Guide”, specifically the section “Creating Strings” where it says (emphasis mine):

The simplest way to create a string object in source code is to use the Objective-C @"..." construct:

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

Note that, when creating a string constant in this fashion, you should use UTF-8 characters. Such an object is created at compile time and exists throughout your program’s execution. The compiler makes such object constants unique on a per-module basis, and they’re never deallocated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文